如何使用在C#中运行的正则表达式找到字符串中的所有匹配项?
我想在下面的示例字符串中找到所有匹配项。 例如:
inputString: Hello (mail) byebye (time) how are you (mail) how are you (time)
我希望与示例中的(mail)
和(time)
匹配。包括括号(
和)
。
在尝试解决此问题时,我写了以下代码。
string testString = @"(mail)|(time)";
Regex regx = new Regex(Regex.Escape(testString), RegexOptions.IgnoreCase);
List<string> mactches = regx.Matches(inputString).OfType<Match>().Select(m => m.Value).Distinct().ToList();
foreach (string match in mactches)
{
//Do something
}
管道(|
)是否用于逻辑OR
条件?
答案 0 :(得分:8)
使用Regex.Escape(testString)
将转义管道角色,转向
@"(mail)|(time)"
有效地进入
@"\(mail\)\|\(time\)".
因此,你的正则表达式正在寻找文字"(mail)|(time)"
。
如果你的所有比赛都像parens包围的单词一样简单,我会像这样建立正则表达式:
List<string> words = new List<string> { "(mail)", "(time)", ... };
string pattern = string.Join("|", words.Select(w => Regex.Escape(w)));
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
答案 1 :(得分:3)
转义测试字符串中的括号:
string testString = @"\(mail\)|\(time\)";
删除Regex.Escape
:
Regex regx = new Regex(testString, RegexOptions.IgnoreCase);
输出(包括括号):
(mail)
(time)
Regex.Escape
在您的情况下不起作用的原因是它也逃脱了|
字符:
通过用\ code代替它们来转义一组最小元字符(\,*,+,?,|,{,[,(,),^,$,。,#和空格)。