Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配日期后跟字符串的模式_C#_Regex - Fatal编程技术网

C# 匹配日期后跟字符串的模式

C# 匹配日期后跟字符串的模式,c#,regex,C#,Regex,我有一个带表单重复模式的字符串 MM/DD/YYYY(FirstName-LastName)状态更新:诸如此类诸如此类 例如 我如何将组与此匹配,以便为每个匹配更新日期、名称和状态 我试过了 string datePattern = "\\d{1,2}/\\d{1,2}/\\d{0,4}"; string personPattern = "\\(\\w*\\)"; Regex regex = new Regex("(" + datePattern

我有一个带表单重复模式的字符串

MM/DD/YYYY(FirstName-LastName)状态更新:诸如此类诸如此类

例如

我如何将组与此匹配,以便为每个匹配更新日期、名称和状态

我试过了

        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
        }

在这一点上它什么也没有收回。

空格不包括在
\w
中,因此
\w*
将与
Joe Bob
不匹配。尝试将
personPattern
更改为
“\\([\\w]*\\)”

看起来您的正则表达式太贪婪了,因为末尾的
*
将匹配字符串的其余部分,而不是在下一个日期停止。尝试将正则表达式更改为以下内容:

Regex regex = new Regex("(" + datePattern + ") (" + personPattern + ") (.*?(?=$|" + datePattern + "))");

\w
中不包含空格,因此
\w*
将与
Joe Bob
不匹配。尝试将
personPattern
更改为
“\\([\\w]*\\)”

看起来您的正则表达式太贪婪了,因为末尾的
*
将匹配字符串的其余部分,而不是在下一个日期停止。尝试将正则表达式更改为以下内容:

Regex regex = new Regex("(" + datePattern + ") (" + personPattern + ") (.*?(?=$|" + datePattern + "))");

这只是告诉我如何得到一些结果,而不是没有结果。是的,我有一个名字和一个日期,但是所有的日期都不是分开的。这只是给了我一个类似于我自己想出的所有其他变体的blob。@P.Brian.Mackey我不确定我是否理解你的意思,你应该为你感兴趣的每个领域建立一个单独的组,并且日期应该在
match.Groups[1]中
。请使用我在问题中发布的代码进行尝试,看看它是否能按说明工作。我希望结果像DB一样被分成行和列Table@P.Brian.Mackey-Ahh明白了,最后的
*
是个问题,因为它与字符串的结尾匹配。刚刚编辑了我的答案,试一试。这只是告诉我如何得到一些结果,而不是没有结果。是的,我有一个名字和一个日期,但是所有的日期都不是分开的。这只是给了我一个类似于我自己想出的所有其他变体的blob。@P.Brian.Mackey我不确定我是否理解你的意思,你应该为你感兴趣的每个领域建立一个单独的组,并且日期应该在
match.Groups[1]中
。请使用我在问题中发布的代码进行尝试,看看它是否能按说明工作。我希望结果像DB一样被分成行和列Table@P.Brian.Mackey-Ahh明白了,最后的
*
是个问题,因为它与字符串的结尾匹配。刚刚编辑了我的答案,试一试。