2

そんなテキストを持って

Above includes - Add/Remove Member To/From Nested Group - 1.24.12 / 1.24.13

私が持っている 3 つの数字の 2 つのグループを返す正規表現を作成するにはどうすればよいですか。期待される結果

1.24.12
1.24.13

そんな表現をしてみた

private static Regex MRDNumbers = new Regex(@"((\d+.?){2,})+");

しかし、それは必要に応じて機能しません。

また、グループの長さは異なる場合があります。

1.22
13.4.7
1.2.3.4
1.2.3.4.5
1.2.3.4.5.6
4

5 に答える 5

2

問題は.あなたのパターンにあります。正規表現言語では、.文字は任意の文字に一致するため (単一行モードを除く)、\ピリオドのみに一致する文字でエスケープする必要があります。

代わりにこれを試してください:

private static Regex MRDNumbers = new Regex(@"((\d+\.?){2,})+");

リスト内の一致するすべての番号を取得するには、次のようにします。

private Regex MRDNumbers = new Regex(@"(\d+?)(?:\.(\d+))+");

string input = "Above includes - Add/Remove Member To/From Nested Group - 1.24.12 / 1.24.13";
MRDNumbers.Matches(input).Cast<Match>().Dump();
var list = 
    (from m in MRDNumbers.Matches(input).Cast<Match>()
     select 
     from g in m.Groups.Cast<Group>().Skip(1)
     from c in g.Captures.Cast<Capture>()
     select c.Value)
    .ToList(); 
// [ [ 1, 24, 12 ], [ 1, 24, 12 ] ]

または流暢な構文で:

var list = 
    MRDNumbers.Matches(input).Cast<Match>()
              .Select(m => m.Groups.Cast<Group>()
                            .Skip(1)
                            .SelectMany(g => g.Captures.Cast<Capture>())
                            .Select(c => c.Value))
              .ToList();
于 2013-05-08T17:23:53.740 に答える
1

わかりました、問題は解決しました。C# で間違った考えを使用しました。ここに正しいコードがあります

private static Regex MRDNumbers = new Regex(@"((\d+\.?){2,})+");
static void Main(string[] args)
{
    string s = " Above includes - Add/Remove Member To/From Nested Group - 1.24.12 / 1.24.13.45 45.78";
    MatchCollection m = MRDNumbers.Matches(s);

    foreach (Match match in m)
    {
        Debug.WriteLine(match.Value);
    }
}
于 2013-05-08T17:33:57.630 に答える
0

あなたのをエスケープしてみてください.

((\d+\.?){2,})+

であることに注意して.ください\.regexpalで動作しているようです。

于 2013-05-08T17:23:04.743 に答える
0

この正規表現を使用できます

\d+(\.\d+)+

このコードでそのような番号のリストを取得できます

List<String> lst=Regex.Matches(input,regex)
                      .Cast<Match>()
                      .Select(x=>x.Value);
于 2013-05-08T17:23:27.080 に答える
0

ドットとグループの 1 つをエスケープする必要があります。あなたが退場する理由1.24.12 1212、それがグループ 2 を満たす最後の試合だからです。

これを試してください:

private static Regex MRDNumbers = new Regex(@"((?:\d+\.?){2,})+");
于 2013-05-08T17:31:46.780 に答える