gpt4 book ai didi

c# - 带有特殊字符的正则表达式嵌套结构

转载 作者:行者123 更新时间:2023-12-04 10:26:35 27 4
gpt4 key购买 nike

我需要在 C# 中找到一个正则表达式,它匹配并从由 $( 和 )$ 分隔的嵌套结构中返回字符串。

我的输入字符串是:
$(string1$(string2)$sometexthere$(string3$(string4)$texttext)$anothertext)$
输出必须是:

$(string1$(string2)$sometexthere$(string3$(string4)$texttext)$anothertext)$
$(string2)$
$(string3$(string4)$texttext)$
$(string4)$

我试过这个正则表达式 \$\([^\$]*\)\$但它只返回最内在的 string2string4 .

有没有办法用正则表达式返回每个匹配项?甚至通过一个循环? ( $()$ 可以用 [] 替换)

最佳答案

您可以使用

(?=(?<result>\$\((?>[^()]+|(?<o>\()|(?<-o>\)))*(?(o)(?!))\)\$))

regex demo , 各抢 match.Groups["result"].Value .

enter image description here

C# 代码片段:
var pattern = @"(?=(?<result>\$\((?>[^()]+|(?<o>\()|(?<-o>\)))*(?(o)(?!))\)\$))";
var results = Regex.Matches(text, pattern)
.Cast<Match>()
.Select(x => x.Groups["result"].Value)
.ToList();

C# demo online .

图案详情
  • (?= - 一个积极的前瞻,将启用重叠匹配:
  • (?<result>\$\((?>[^()]+|(?<o>\()|(?<-o>\)))*(?(o)(?!))\)\$) - 组“结果”:
  • \$\( - $(子串
  • (?>[^()]+|(?<o>\()|(?<-o>\)))* - 除 ( 之外的 1+ 个字符和 )(推送到“o”组堆栈或 )从 "o"组堆栈中弹出,0 次或更多次
  • (?(o)(?!)) - 如果组“o”堆栈不为空,则匹配失败的条件
  • \)\$ - 一个 )$子串
  • ) - 前瞻结束
  • 关于c# - 带有特殊字符的正则表达式嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60616355/

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