繁体   English   中英

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

[英]Match an specific expression not between parenthesis in C#

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

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

尝试往后 :匹配每个RR?US? ?2217 ?B7 RR?US? ?2217 ?B7模式,除非它以括号和字母(?<!\\([AZ]*)开头:

        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);
        }

您的模式以单词字符开头。 另一个选择可能是利用否定式(?<!\\()断言左边不是a (并在比赛开始时使用单词边界\\b

(?<!\()\bRR?US? ?2217 ?B7

说明

  • (?<!\\()否定向后断言左侧的内容不是(
  • \\b 字边界
  • RR?US? ?2217 ?B7 RR?US? ?2217 ?B7符合您的样式

查看.NET regex演示 | C#演示

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM