9

文字列に数字以外のものが含まれているかどうかを確認する必要があります。しかし、私には問題があります。

echo bdfbdfd | findstr /R [^0123456789]

何も返しませんが、bdfbdfdを返す必要があります。だが

echo 123 | findstr /R [^0123456789]

'123'を返します。なんで?逆に機能するはずです。

4

3 に答える 3

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]

(に注意してください^^

bdfbdfd2番目の正規表現を間に入れて""スペースを削除する部分では、指定された文字列に対して機能します。

編集:

1つの文字に一致していることに注意してください。試合中

echo bdfbdfd | findstr /R [^0123456789]

文字列に数字が含まれていなかったため、何も一致しませんでした(^エスケープする必要のある数字はカウントされていません)。の

echo 123 | findstr /R [^0123456789]

あなたは最初の桁と一致していました。123(space)正規表現を使用すると、単一の一致を含むすべての文字列と一致するため、正規表現と一致させようとすると[^^0123456789]、文字列の末尾に数字がないため、文字列全体が一致として出力されます。

于 2012-10-01T08:31:35.053 に答える
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]"
于 2012-10-01T08:29:00.610 に答える
0

おそらく、変数に文字列をキャプチャするときにこれを試して、一致するかどうかのオプションを選択できます。

echo.%Name% | findstr /R [^0-9]Nul && (
  echo There was a match in Name variable contents
) || (
  echo Match Not Found
)
于 2015-11-18T21:49:18.677 に答える