我需要检查一个字符串中是否包含除数字以外的任何字符。但是我遇到了问题。
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
^
,因此写为:echo 123| findstr /R [^^0123456789]
注意到 ^^
这一部分。
对于 bdfbdfd
部分,在第二个正则表达式两侧加上双引号并删除空格,就能使它在指定的字符串中起作用。
编辑:
请注意你正在匹配单个字符。在这个匹配中。
echo bdfbdfd | findstr /R [^0123456789]
没有任何匹配项,因为您的字符串中没有包含任何数字(不算需要转义的^
)。在
echo 123 | findstr /R [^0123456789]
您正在匹配第一个数字。使用您的正则表达式,将匹配任何包含单个匹配项的字符串,因此尝试使用正则表达式[^^0123456789]
和123(space)
进行匹配将输出整个字符串作为匹配项,因为字符串末尾有非数字字符。
^
是 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]"
echo.%Name% | findstr /R [^0-9]Nul && (
echo There was a match in Name variable contents
) || (
echo Match Not Found
)
[^...]
这个负字符类似乎是有问题的。我以为可能是转义或引用的问题,但找不到任何可行的解决方法。 - dan1111