You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中使用正则捕获逗号分隔的双词组合?

问题:捕获空格分隔的连续两个单词的正则表达式

我正在编写正则表达式,用来捕获文本中由空格分隔的两个连续单词,测试文本如下:

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]+)*\b";
//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 = 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(" ")}");
}

编辑1

我用模式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.");

内容的提问来源于stack exchange,提问作者user23077506

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:29:54