[英]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
说明
查看.NET regex演示 | C#演示
另一种方法是匹配您不想要的内容,并在组中捕获您想要的内容:
\(RR?US? ?2217 ?B7\)|(RR?US? ?2217 ?B7)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.