C# 如何在C中使用正则表达式拆分嵌套的逗号分隔列表#
我有一个字符串,看起来像:C# 如何在C中使用正则表达式拆分嵌套的逗号分隔列表#,c#,regex,split,nested,comma,C#,Regex,Split,Nested,Comma,我有一个字符串,看起来像: AA,BB,CC(DD,EE(FF)) 我希望在根级别拆分,保留嵌套列表不变。因此,上述字符串将分为: AA, BB, and CC(DD,EE(FF)) 我知道如何在没有正则表达式的情况下实现这一点,但我很难编写一个正则表达式,它可以识别最外层的逗号,并忽略分隔符中的逗号。在.Net中,可以用来捕获嵌套结构。这可能比您已有的代码更复杂: (?> (?<Open>\() # Increase stack depth when ma
AA,BB,CC(DD,EE(FF))
我希望在根级别拆分,保留嵌套列表不变。因此,上述字符串将分为:
AA, BB, and CC(DD,EE(FF))
我知道如何在没有正则表达式的情况下实现这一点,但我很难编写一个正则表达式,它可以识别最外层的逗号,并忽略分隔符中的逗号。在.Net中,可以用来捕获嵌套结构。这可能比您已有的代码更复杂:
(?>
(?<Open>\() # Increase stack depth when matching (
|
(?<-Open>\)) # Decrease stack depth when matching )
|
[^(),] # Match any other character
|
(?(Open),|(?!)) # Allow commas only while inside parentheses.
)+
(?(Open)(?!)) # Ensure we have no extra open parentheses.
(?>
(?\()\匹配时增加堆栈深度(
|
(?\)\匹配时减少堆栈深度)
|
[^(),]#匹配任何其他字符
|
(?(打开),|(?!)#括号内仅允许逗号。
)+
确保我们没有额外的开括号。
一种更简单(但更丑陋)的方法适用于所有正则表达式风格,即限制您支持的嵌套级别。例如:
- 一级括号-仅为
和AA
:AA(B,B)
- 两个级别,也匹配AA(B,B(C,C)):
- 三个级别是:
基本上,我们正在为每个我们想要匹配的新级别添加另一个
(?:[^()].\([^()]*\)*
。显然,由于在这篇文章中所表现出的努力程度,帖子应该会获得否决票。。。也许你应该展示你已经尝试过的东西,并解释为什么搜索像(即)这样的东西没有帮助。。。至少波斯特有机会。。。