1

perl 出身の私は、asp.net 正規表現クラスに少し混乱しています。

一致させようとしている単純なパターンがあります:「数字テキスト番号」

私のコードは次のようになります:

     Match results = Regex.Match(mystring, @"(\d+)\s+(Highway|Hwy|Route|Rte)\s+(\d+)",RegexOptions.IgnoreCase);

     foreach (Group g in results.Groups)
     {
        string token = g.Value;
     }

問題は、グループに 4 つの結果が含まれているように見えることです。最初の結果は一致する文字列全体であり、次の 3 つは予想される結果です。

3 つの結果に直接アクセスする簡単な方法はありますか?

4

3 に答える 3

0

あなたが使用することができますMatches

// Define a test string.        
string text = "The the quick brown fox  fox jumped over the lazy dog dog.";

// Find matches.
MatchCollection matches = rx.Matches(text);

// Report the number of matches found.
Console.WriteLine("{0} matches found in:\n   {1}", 
                      matches.Count, 
                      text);

// Report on each match.
foreach (Match match in matches)
{
    ...
}
于 2012-08-01T14:55:46.197 に答える
0

これは、動作するように設計されている方法の例にすぎず、最初の一致を無視する例にすぎません。私はそれが奇妙な実装であり、私が期待していた動作とは異なることに同意します.

正規表現エンジンが一致を検出できる場合、Groups プロパティによって返される GroupCollection オブジェクトの最初の要素には、正規表現パターン全体に一致する文字列が含まれます。

ここから撮影

これは古い質問であることは承知していますが、自分の考えを確認するために検索してここにたどり着きましたが、決定的な答えはありませんでした.

于 2013-05-15T10:19:43.767 に答える
0
var results = Regex.Match("55 Hwy 66", @"(\d+)\s+(Highway|Hwy|Route|Rte)\s+(\d+)", RegexOptions.IgnoreCase).Groups.OfType<Group>().Select((name, index) => new {name, index}).Where(x => x.index > 0).Select(x => x.name).ToList();
于 2012-08-01T14:53:37.763 に答える