gpt4 book ai didi

c# - 如何排除嵌套括号内的正则表达式匹配

转载 作者:行者123 更新时间:2023-11-30 18:47:17 28 4
gpt4 key购买 nike

我有这样一段文字:

UseProp1?(Prop1?Prop1:Test):(UseProp2?Prop2:(Test Text: '{TextProperty}' Test Reference:{Reference}))

我正在尝试在 C# 中使用正则表达式来提取嵌套的 if/else 段。

要查找“?”我用过:

模式一:\?\s*(?![^()]*\))

并找到':'我用过:

模式 2:\:\s*(?![^()]*\))

这在有一层括号时工作正常,但在嵌套它们时无效。

我使用这个在线工具来简化测试:http://regexstorm.net/tester (并插入 pattern-1 和上面的输入)

如您所见,它突出显示了两个匹配项,但我只想要第一个。您还会注意到第一个括号被忽略了,但下一个具有嵌套级别的括号没有被忽略

我希望匹配列表是:

1) 使用属性1

2) (Prop1?Prop1:Test):(UseProp2?Prop2:(测试文本:'{TextProperty}' 测试引用:{Reference}))

我现在得到的是:

1) 使用属性1

2) (Prop1?Prop1:Test):(UseProp2

3) Prop2:(测试文本:'{TextProperty}' 测试引用:{Reference}))

最佳答案

扩展 @bobble bubble's comment ,这是我的正则表达式:

它将捕获第一层三元函数。捕获组:$1 是条件句,$2 是真子句,$3 是假子句。然后,您必须匹配每一个上的正则表达式才能进一步向下走树:

((?:\((?>\((?<c>)|[^()]+|\)(?<-c>))*(?(c)(?!))\))+|\b[^)(?:]+)+\?((?:\((?>\((?<c>)|[^()]+|\)(?<-c>))*(?(c)(?!))\))+|\b[^)(?:]+)+\:((?:\((?>\((?<c>)|[^()]+|\)(?<-c>))*(?(c)(?!))\))+|\b[^)(?:]+)+

Code in Tester

也就是说,如果您也在计算这些表达式中的数学,使用运行时编译器为您完成所有繁重的工作可能更有值(value)。 This answer如果您愿意,将帮助您朝着那个方向进行设计。

关于c# - 如何排除嵌套括号内的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483593/

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