我需要检查一个字符串是否包含除数字之外的任何内容。但我遇到了问题。
echo bdfbdfd | findstr /R [^0123456789]
什么都不返回,但它应该返回bdfbdfd。 但是
echo 123 | findstr /R [^0123456789]
返回'123'。为什么?反之亦然。
答案 0 :(得分:8)
经过大量的测试后我们去了:
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]
匹配将输出整个字符串作为匹配项,因为该字符串中包含非数字字符。字符串的结尾。
答案 1 :(得分:3)
^
是CMD.EXE
的转义字符。
你需要用另一个来逃避它:
echo xxxx | findstr /R [^^0123456789]
或在模式周围使用引号:
echo xxxx | findstr /R "[^0123456789]"
更新:实际上以下部分是错误的,因为您正在寻找“其他任何东西,只有数字”。以下内容不适用于输入字符串,如“1x”,显然包含除数字之外的内容。因此,最好的解决方案是使用@Gabber建议的方法,即在管道前摆脱空间。
echo xxxx| findstr /R "[^0-9]"
此外,您需要在 |
(管道)之前删除空格(请参阅@ 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]"
答案 2 :(得分:0)
也许你可以在捕获变量中的String时尝试这个,并且在匹配的情况下有关于该怎么做的选项:
echo.%Name% | findstr /R [^0-9]Nul && (
echo There was a match in Name variable contents
) || (
echo Match Not Found
)