Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中使用正则表达式拆分嵌套的逗号分隔列表#_C#_Regex_Split_Nested_Comma - Fatal编程技术网

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)):
  • 三个级别是:

基本上,我们正在为每个我们想要匹配的新级别添加另一个
(?:[^()].\([^()]*\)*

显然,由于在这篇文章中所表现出的努力程度,帖子应该会获得否决票。。。也许你应该展示你已经尝试过的东西,并解释为什么搜索像(即)这样的东西没有帮助。。。至少波斯特有机会。。。