string text = "RRUS 2217 B7 (RRUS 2217 B7)";
string pattern = "[^(]RR?US? ?2217 ?B7";
foreach(Match match in Regex.Matches(text, pattern))
{
Console.WriteLine(match.Value);
}
但控制台中的输出如下:
RRUS 2217 B7
RRUS 2217 B7
答案 0 :(得分:1)
尝试向后看:匹配每个RR?US? ?2217 ?B7
模式,除非它前面带有括号和字母(?<!\([A-Z]*)
:
string text = "RRUS 2217 B7 (RRUS 2217 B7)";
string pattern = @"(?<!\([A-Z]*)RR?US? ?2217 ?B7";
foreach(Match match in Regex.Matches(text, pattern))
{
Console.WriteLine(match.Value);
}
答案 1 :(得分:1)
您的模式以单词字符开头。另一种选择是利用(?<!\()
后面的否定性断言来断言左侧不是(
,并在比赛开始时使用单词边界\b
:>
(?<!\()\bRR?US? ?2217 ?B7
说明
(?<!\()
否定的lookbehind断言左边不是(
\b
Word boundary RR?US? ?2217 ?B7
匹配您的模式另一种方法可能是匹配您不想要的内容并在组中捕获您想要的内容:
\(RR?US? ?2217 ?B7\)|(RR?US? ?2217 ?B7)