gpt4 book ai didi

c# - 正则表达式嵌套括号在一种情况下不起作用

转载 作者:行者123 更新时间:2023-11-30 21:52:46 25 4
gpt4 key购买 nike

使用 C# Grouping Constructs in Regular Expressions可以匹配嵌套括号内的内容,如 this response 所示.以下代码正确返回 (b/(2c))(abc) :

st = "Test(b/(2c)) some (abc) test.";
foreach (Match mt in Regex.Matches(st, @"\((?>\((?<DEPTH>)|\)(?<-DEPTH>)|.?)*(?(DEPTH)(?!))\)"))
{
Console.WriteLine(mt.Value);
}

但是,当我将模式更改为 @"(?<=/)\((?>\((?<DEPTH>)|\)(?<-DEPTH>)|.?)*(?(DEPTH)(?!))\)" 时只需添加 (?<=/)在上述模式之前只获取 / 前面的括号我预计只会得到 (2c)但我得到 (2c))额外的 ) . 我缺少什么? 注意:如果我的输入字符串是 Test(b)/(2c) some (abc) test.然后我的新模式正确返回 (2c)仅。

最佳答案

*字符是 greedy , 它会尽可能匹配,这就是为什么第二个 )字符匹配。

为避免这种情况,您可以更改 .[^)]匹配所有非 )字符:

Regex.Matches(st, @"(?<=\/)\((?>\((?<DEPTH>)|\)(?<=-DEPTH>)|[^)])*(?(DEPTH)(?!))\)")

它将匹配 (2c) - example .


或者,您可以只添加 ?* 之后在 (?<=-DEPTH>)|.)*?这样*很懒惰并且.将匹配尽可能少的次数。

Regex.Matches(st, @"(?<=\/)\((?>\((?<DEPTH>)|\)(?<=-DEPTH>)|.)*?(?(DEPTH)(?!))\)")

它将匹配 (2c)还有 - example .

关于c# - 正则表达式嵌套括号在一种情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34459094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com