我想使用正则表达式从以下字符串中提取aaa
,bb b={{b}}bb bbb
和{ccc} ccc
:
zyx={aaa},yzx={bb b={{b}}bb bbb},xyz={{ccc} ccc}
注意:aaa
代表任意数量的字符的任意序列,因此没有确定的长度或图案。例如,{ccc} ccc
可以是{cccccccccc}cc {cc} cccc cccc
或任何其他组合),
我写了以下正则表达式:
(?<a>[^{}]*)\s*=\s*{((?<v>[^{}]+)*)},*
此表达式提取了aaa
,但是由于嵌套了花括号,因此无法使用catastrophic backtracking failure来解析其余的输入。
关于如何更新正则表达式以正确处理嵌套括号的任何想法?
(以防万一,如果您需要特定于引擎的选项,我正在使用C#.NET Core 3.0。此外,我宁愿对代码不做任何魔术,而仅使用正则表达式模式。)
类似的问题
问题regular expression to match balanced parentheses与该问题类似,不同之处在于,这里的括号不一定是平衡的,而是遵循x={y}
模式。
更新1
也可以输入以下内容:
yzx={bb b={{b}},bb bbb,},
请注意,
和{{b}}
之后的bbb
。
更新2
我写了以下模式,它可以匹配第一个示例中除aaa
以外的任何内容:
(?<A>[^{}]*)\s*=\s*{(?<V>(?<S>([^{}]?)\{(?:[^}{]+|(?&S))+\}))}(,|$)