C#正则表达式表示否定字符类,除非字符相邻
我需要匹配字符串中最里面的一组括号之间的字符,但允许使用诸如“()”之类的空括号。尽我所能,这里需要某种消极的前瞻(这与标记为重复的问题完全不同) 未正确包含“()”的初始版本为: 一些测试示例:C#正则表达式表示否定字符类,除非字符相邻,c#,regex,regex-negation,regex-lookarounds,C#,Regex,Regex Negation,Regex Lookarounds,我需要匹配字符串中最里面的一组括号之间的字符,但允许使用诸如“()”之类的空括号。尽我所能,这里需要某种消极的前瞻(这与标记为重复的问题完全不同) 未正确包含“()”的初始版本为: 一些测试示例: x (a) y -> a x (a b) y -> a b x (a b c) y -> a b c x (a b() c) y -> a b() c x (a() b() c) y -> a() b() c x (a b
x (a) y -> a
x (a b) y -> a b
x (a b c) y -> a b c
x (a b() c) y -> a b() c
x (a() b() c) y -> a() b() c
x (a b() c()) y -> a b() c()
x (a b(a) c) y -> a
x (a (b() c)) y -> b() c
x () y -> empty
和c#测试方法(适用于您的断言库):
var re=newregex(@“\([^()]+)\);
字符串[]测试={
“x(a)y”、“a”,
“x(AB)y”、“AB”,
“x(abc)y”、“abc”,
“x(ab()c)y”,“ab()c”,
“x(a()b()c)y”,“a()b()c”,
“x(ab()c())y”,“ab()c()”,
“x(a)b(a)c)y”、“a”,
“x(a(b()c))y”,“b()c”,
“x()y”
};
对于(int i=0;i
您可以使用这样的工具:(无需四处寻找)
对正则表达式所做的调整:
在非捕获组中添加了[^()]
,以及可选的\(\)
,以便它可以匹配除(
和)
以外的字符或空括号(
)
或者,如果您不需要捕获组,您可以通过如下方式使用Lookarounds将其删除,并将您的匹配项设置为完全匹配项,而不是组:
(?<=\()(?:[^()]|\(\))+(?=\))
(?您可以使用这样的东西:(不需要环顾四周)
对正则表达式所做的调整:
在非捕获组中添加了[^()]
,以及可选的\(\)
,以便它可以匹配除(
和)
以外的字符或空括号(
)
或者,如果您不需要捕获组,您可以通过如下方式使用Lookarounds将其删除,并将您的匹配项设置为完全匹配项,而不是组:
(?<=\()(?:[^()]|\(\))+(?=\))
(?研究捕获组。一旦你有了那块拼图,你就应该能够适应其余的。@wiktor stribiżew我想你可能遗漏了一些东西。首先,你的正则表达式不是一个有效的答案(参见测试用例)。第二,这是一个与您将其标记为重复的问题截然不同的问题。我如何编辑该问题以使其更清楚?研究捕获组。一旦您有了那块拼图,您就应该能够匹配其余的。@wiktor stribiżew我想您可能遗漏了一些内容。首先,您的正则表达式无效回答(参见测试用例)。第二,这是一个与您将其标记为重复的问题截然不同的问题。我如何编辑该问题以使其更清楚?很好--请参见很好--请参见
(?<=\()(?:[^()]|\(\))+(?=\))