2

C# を使用して次のパターンに一致させようとしていますが、一致するものが見つかりません

正規表現

^([[a-z][A-Z]]*):([[a-z][A-Z][0-9],]*)$

サンプル文字列

Student:Tom,Jerry

同じことがルビーでも機能しますが(Rubularを使用して検証しました)。これがc#で機能しない理由は何ですか?

コードブロック

public static KeyValuePair<string, IList<string>> Parse(string s)
    {
        var pattern = new Regex(@"(\w*):([\w\d,]*)");
        var matches = pattern.Matches(s);
        if (matches.Count == 2)
        {
            return new KeyValuePair<string, IList<string>>(matches[0].Value, matches[1].Value.Split(','));
        }

        throw new System.FormatException();
    }
4

2 に答える 2

9

正規表現を少し変更してみてください:-

([a-zA-Z]*):([a-zA-Z0-9,]*)

すべての単語文字 (アンダースコアを含む) が必要な場合は、もう少し単純化することもできます。そうでない場合は、上記のものを使用します。

(\w*):([\w\d,]*)

次のような複数グループのグループ化は必要ありません[[a-z][A-Z]]

于 2012-07-24T19:20:11.687 に答える
1

さらに単純化できます。

^([A-z]*):([\w,]*)$

最初のグループは と同等[a-zA-Z]で、2 番目のグループは と同等[a-zA-Z0-9]です。最初のグループを数字と文字に一致させたい場合は、\wどこでも使用できます。

于 2012-07-24T19:26:46.713 に答える