匹配特定的表达式,而不是在C#中的括号之间

时间:2019-02-27 08:25:12

标签: c# regex

如下所示,我有一个字符串,其中包含括号内或括号外的某些项目的序列号。如何匹配括号内的项目

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

2 个答案:

答案 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

说明

查看.NET regex demo | C# demo

另一种方法可能是匹配您不想要的内容并在组中捕获您想要的内容:

\(RR?US? ?2217 ?B7\)|(RR?US? ?2217 ?B7)