我需要检查一个字符串是否包含除数字之外的任何内容。但我有一个问题。
echo bdfbdfd | findstr /R [^0123456789]
什么都不返回,但它应该返回 bdfbdfd。但
echo 123 | findstr /R [^0123456789]
返回“123”。为什么?它应该反之亦然。
我需要检查一个字符串是否包含除数字之外的任何内容。但我有一个问题。
echo bdfbdfd | findstr /R [^0123456789]
什么都不返回,但它应该返回 bdfbdfd。但
echo 123 | findstr /R [^0123456789]
返回“123”。为什么?它应该反之亦然。
经过大量测试后,我们开始:
echo 123 | findstr /R "[^0123456789]"
^ this space is what is matched, remove it and it won't match anything
另一种方法是(正如 Christian.K 所说)逃避^
这样的写作
echo 123| findstr /R [^^0123456789]
(注意^^
)
对于bdfbdfd
将第二个正则表达式放在中间""
并删除空格的部分,它可以用于指定的字符串。
编辑:
请注意,您匹配的是单个字符。在比赛中
echo bdfbdfd | findstr /R [^0123456789]
没有任何内容匹配,因为您的字符串不包含任何数字(不包括^
需要转义的数字)。在
echo 123 | findstr /R [^0123456789]
你匹配的第一个数字。使用您的正则表达式,您将匹配包含单个匹配项的任何字符串,因此尝试123(space)
与正则表达式匹配[^^0123456789]
也会将整个字符串作为匹配项输出,因为字符串末尾的非数字字符。
是的^
转义字符CMD.EXE
。
你需要用另一个来逃避它:
echo xxxx | findstr /R [^^0123456789]
或在模式周围使用引号:
echo xxxx | findstr /R "[^0123456789]"
更新:实际上以下部分是错误的,因为您正在寻找“除数字之外的任何其他内容”。以下不适用于像“1x”这样的输入字符串,它显然包含除数字之外的其他内容。因此,可能最好的解决方案是使用@Gabber 建议的方法,即去掉管道前的空间。
echo xxxx| findstr /R "[^0-9]"
此外,您需要删除 (pipe) 之前的空格(请参阅@Gabber 的答案)|
,或者确保模式从行的开头匹配(这里有几个选项):
echo xxxx | findstr /R "^[^0123456789]"
echo xxxx | findstr /R ^^[^^0123456789]
echo xxxx | findstr /B /R "[^0123456789]"
echo xxxx | findstr /B /R ^^[^^0123456789]
[0-9]
最后,您可以通过使用而不是列出所有数字来缩短您的模式:
echo xxxx | findstr /B /R "[^0-9]"
您仍然可以将您的模式压缩为[0-9]
:
echo xxxx| findstr /R "[^0-9]"
也许您可以在捕获变量中的字符串时尝试此操作,并在匹配或不匹配的情况下设置选项:
echo.%Name% | findstr /R [^0-9]Nul && (
echo There was a match in Name variable contents
) || (
echo Match Not Found
)