【问题标题】:How to split a nested comma separated list using Regex in C# [duplicate]如何在 C# 中使用正则表达式拆分嵌套的逗号分隔列表 [重复]
【发布时间】:2018-01-23 04:07:07
【问题描述】:

我有一个看起来像这样的字符串:

AA,BB,CC(DD,EE(FF))

我想在根级别拆分,保持嵌套列表不变。所以上面的字符串会被拆分成:

AA, BB, and CC(DD,EE(FF))

我知道如何在没有正则表达式的情况下执行此操作,但我很难编写一个可以识别最外层逗号并忽略括号中的逗号的正则表达式。

【问题讨论】:

标签: c# regex split nested comma


【解决方案1】:

在 .Net 中,您可以使用 balancing groups 来捕获嵌套结构。这可能比您已经拥有的代码更复杂:

(?>
    (?<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.

Live example on Regex Storm

适用于所有正则表达式风格的更简单(但更丑陋)的方法是限制您支持的嵌套级别。例如:

基本上,我们会为每个我们想要匹配的新关卡添加另一个(?:[^()]|\([^()]*\))*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多