6

C# と Regex を使用すると、奇妙な状況が発生します。

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
MatchCollection collection = Regex.Matches(substr, @"[\d]*");

私の世界では、上記は 6 つの結果を含む「コレクション」の結果をもたらします。不思議なことに、私のコレクションには 12 の結果が含まれており、1 秒ごとの結果は {} (空) です。

私はそれを次のように書き直そうとしました:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
Regex regex = new Regex(@"[\d]*");
MatchCollection collection = regex.Matches(substr);

しかし、まったく同じ結果が得られます。ここで何が欠けていますか?

私は.Net Framework 4.5、C#を使用しています

4

2 に答える 2

7

問題は*量化子だと思います。0 個以上の文字に一致します。つまり、空の文字列は技術的に一致します。+次のように量指定子を使用する必要があります。

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
MatchCollection collection = Regex.Matches(substr, @"\d+");

// or
Regex regex = new Regex(@"\d+");
MatchCollection collection = regex.Matches(substr);

1 つ以上の数字を含む文字列のみが返されるようにします。

ここでは完全に不要なため、文字クラス ( []) も削除したことに注意してください。\d

参考文献:

于 2013-06-10T11:23:05.727 に答える