我一直在使用正则表达式创建一个模式,该模式将捕获一个单词,然后是空格,然后是另一个单词,如下面的示例所示:
string ToSearch = "Hello Steve steve, Martin martin, Scott scott to ASP.Net Program";
string ToSearch2 = "Hello Steve steve, Martin martin, Scott scott, Harry harry, Peter peter, Ron ron to ASP.Net Program";
string ToSearch3 = "Hello Steve steve, Martin martin, Scott scott, Harry harry, Peter peter, Ron ron, Will will, smith Smith to ASP.Net Program";
string ToSearch4 = "Hello Steve Harvey, Martin Lawrence, Scott Hardy, Harry Potter, Peter Pan, Ron Wesley, Will Smith, mr Smith to ASP.Net Program";
所以,我想获取例如Steve Harvey
、Martin Lawrence
等匹配的列表,但我似乎无法使用正确的模式.
以下是我使用的模式
//string pattern = @"[a-zA-Z]+(,[\s]+[\D]+)";
//string pattern = @"\b[a-zA-Z]+(?:,[\s]+[a-zA-Z]+)*\b"; // Working
//string pattern = @"\b[a-zA-Z]+[\s]+[a-zA-Z]+(?:[\s]+[a-zA-Z]+)*\b";
//string pattern = @"\b[a-zA-Z]+(?:[\s]+[a-zA-Z]+)*(?:,[\s]+[a-zA-Z]+(?:[\s]+[a-zA-Z]+)*)*\b";
//string pattern = @"\b[a-zA-Z]+(?:\s+[a-zA-Z]+)*(?:,\s*[a-zA-Z]+(?:\s+[a-zA-Z]+)*)*\b";
//string pattern = @"(?<!\w)(?:[A-Za-z]+(?: [A-Za-z]+)*)(?!\w)";
//string pattern = @"\b[a-zA-Z]+([\s]+[a-zA-Z]*(?:,[\s]+[a-zA-Z]+))+[\s]+[a-zA-Z]*\b";
//string pattern = @"\b[\D]+\s+[\D]*\b";
//string pattern = @"\b([A-Z][a-z]*)\s*([a-z]+)(?=\s*,|\s|$)"; // Best
//string pattern = @"\b([\D]*)\s*([\D]+)(?=\s*,|\s|$)"; // Best
//string pattern = @"\b(\w+)\s+\1\b";
//string pattern = @"\b(\w+)\s+\b(\1|\1\w+)";
//string pattern = @"\b(\w+)\b.*?(?i:\1)\b";
//string pattern = @"\b([A-Za-z]*\s*[A-Za-z])\s+([a-zA-Z]+)";
//string pattern = @"\b[A-Za-z]*\s*([A-Za-z]+)(?=\s*,|\s|$)";
//string pattern = @"\b([A-Za-z])+\s+([A-Za-z]+)(?=\s*,)"; // Almost
//string pattern = @"\b([A-Za-z]+)\s+([A-Za-z]+)(?=\s*,|\s*$)";
//string pattern = @"\b[a-zA-Z]+[\s]+[a-zA-Z]+(?:,[\s]+[a-zA-Z]+)*\b";
//string pattern = @"\b[a-zA-Z]+(?:,[\s]+[a-zA-Z]+)+(?:,[\s]+[a-zA-Z]+)*";
//string pattern = @"\b[a-zA-Z]+(?:,[\s]+[a-zA-Z])+(?:[\s]+[a-zA-Z]+)*\b";
//string pattern = @"\b[a-zA-Z]+(?:,[\s]+[0-9a-zA-Z])?(?:,[\s]+[a-zA-Z]+(?:,[\s]+[0-9a-zA-Z])+)*\b";
我做错了什么?另外,你能为我提供一个网站/博客/视频教程,详细解释如何在c#中使用regex吗?
正则表达式的框架代码:
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
System.Diagnostics.Debug.WriteLine($"Regex Result: {regex.IsMatch(ToSearch)}");
Assert.IsTrue(regex.IsMatch(ToSearch));
foreach(Match m in regex.Matches(ToSearch))
{
System.Diagnostics.Debug.WriteLine($"Regex Result: {m.Value}");
System.Diagnostics.Debug.WriteLine($"Regex Result contains space: {m.Value.Contains(" ")}");
}
100
以下是来自模式string pattern = @"(\w+\s+\w+(?=,))|((?<=,\s*\w+\s+\w+))";
的查询结果
Debug Trace:
Regex Result: True
Regex Result: Steve steve
Regex Result: Martin martin
Regex Result:
Regex Result:
Regex Result:
Regex Result:
Regex Result:
Regex Result:
Regex Result2: True
Regex Result2: Steve steve
Regex Result2: Martin martin
Regex Result2:
Regex Result2: Scott scott
Regex Result2:
Regex Result2: Harry harry
Regex Result2:
Regex Result2: Peter peter
Regex Result2:
Regex Result2:
Regex Result2:
Regex Result2:
Regex Result3: True
Regex Result3: Steve steve
Regex Result3: Martin martin
Regex Result3:
Regex Result3: Scott scott
Regex Result3:
Regex Result3: Harry harry
Regex Result3:
Regex Result3: Peter peter
Regex Result3:
Regex Result3: Ron ron
Regex Result3:
Regex Result3: Will will
Regex Result3:
Regex Result3:
Regex Result3:
Regex Result3:
Regex Result3:
Regex Result3:
Regex Result4: True
Regex Result4: Steve Harvey
Regex Result4: Martin Lawrence
Regex Result4:
Regex Result4: Scott Hardy
Regex Result4:
Regex Result4: Harry Potter
Regex Result4:
Regex Result4: Peter Pan
Regex Result4:
Regex Result4: Ron Wesley
Regex Result4:
Regex Result4: Will Smith
Regex Result4:
Regex Result4:
Regex Result4:
Regex Result4:
Regex Result4:
Regex Result4:
Test assertions passed successfully.
以下是我的代码测试:
string ToSearch = "Hello Steve steve, Martin martin, Scott scott to ASP.Net Program";
//string ToSearch = "Hello Steve steve, Martin martin, Scott scott, Harry harry, Peter peter, Ron ron to ASP.Net Ptogram";
Regex regex = new Regex(pattern);
System.Diagnostics.Debug.WriteLine($"Regex Result: {regex.IsMatch(ToSearch)}");
Assert.IsTrue(regex.IsMatch(ToSearch));
foreach(Match m in regex.Matches(ToSearch))
{
System.Diagnostics.Debug.WriteLine($"Regex Result: {m.Value}");
//System.Diagnostics.Debug.WriteLine($"Regex Result contains space: {m.Value.Contains(" ")}");
}
string ToSearch2 = "Hello Steve steve, Martin martin, Scott scott, Harry harry, Peter peter, Ron ron to ASP.Net Program";
System.Diagnostics.Debug.WriteLine($"Regex Result2: {regex.IsMatch(ToSearch2)}");
Assert.IsTrue(regex.IsMatch(ToSearch2));
foreach (Match m in regex.Matches(ToSearch2))
{
System.Diagnostics.Debug.WriteLine($"Regex Result2: {m.Value}");
//System.Diagnostics.Debug.WriteLine($"Regex Result contains space2: {m.Value.Contains(" ")}");
}
string ToSearch3 = "Hello Steve steve, Martin martin, Scott scott, Harry harry, Peter peter, Ron ron, Will will, smith Smith to ASP.Net Program";
System.Diagnostics.Debug.WriteLine($"Regex Result3: {regex.IsMatch(ToSearch3)}");
Assert.IsTrue(regex.IsMatch(ToSearch3));
foreach (Match m in regex.Matches(ToSearch3))
{
System.Diagnostics.Debug.WriteLine($"Regex Result3: {m.Value}");
//System.Diagnostics.Debug.WriteLine($"Regex Result contains space3: {m.Value.Contains(" ")}");
}
string ToSearch4 = "Hello Steve Harvey, Martin Lawrence, Scott Hardy, Harry Potter, Peter Pan, Ron Wesley, Will Smith, mr Smith to ASP.Net Program";
System.Diagnostics.Debug.WriteLine($"Regex Result4: {regex.IsMatch(ToSearch4)}");
Assert.IsTrue(regex.IsMatch(ToSearch4));
foreach (Match m in regex.Matches(ToSearch4))
{
System.Diagnostics.Debug.WriteLine($"Regex Result4: {m.Value}");
//System.Diagnostics.Debug.WriteLine($"Regex Result contains space2: {m.Value.Contains(" ")}");
}
// Print a success message to the trace
System.Diagnostics.Debug.WriteLine("Test assertions passed successfully.");