0

フォームの繰り返しパターンの文字列があります

MM/DD/YYYY (FirstName LastName) Status Update: blah blah blah blah

例えば

string test = "11/01/2011 (Joe Bob) Status Update: Joe is the collest guy on earfth 08/07/2010 (Rach Mcadam) Status Update: whatever I dont care 06/28/2009 (Some Guy) Status Update: More junk and note how I end there's not gonna be another date after me"

一致ごとに日付、名前、ステータスを更新するために、これをグループで一致させるにはどうすればよいですか?

私は試した

        string datePattern = "\\d{1,2}/\\d{1,2}/\\d{0,4}";
        string personPattern = "\\(\\w*\\)";
        Regex regex = new Regex("(" + datePattern + ") (" + personPattern + ") (.*)");
        MatchCollection matches = regex.Matches(test);
        foreach (Match match in matches)
        {
            Console.WriteLine("##Match Found##");
            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine(match.Groups[0]);//full text
            Console.WriteLine("");
            Console.WriteLine(match.Groups[1]);//date only
            Console.WriteLine("");
            Console.WriteLine(match.Groups[2]);//person
            Console.WriteLine("");
            Console.WriteLine(match.Groups[3]);//note
        }

この時点では何も引き戻されていません。

4

1 に答える 1

3

スペースはに含まれていない\wため、\w*とは一致しませんJoe Bob。に変更personPatternしてみてください"\\([ \\w]*\\)"

.*また、次の日付で停止するのではなく、最後のが文字列の残りの部分と一致するため、正規表現が貪欲すぎるように見えます。正規表現を次のように変更してみてください。

Regex regex = new Regex("(" + datePattern + ") (" + personPattern + ") (.*?(?=$|" + datePattern + "))");
于 2012-08-06T21:42:13.960 に答える