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明白了,最后的*
是个问题,因为它与字符串的结尾匹配。刚刚编辑了我的答案,试一试。