如何在C#中使用逗号排除内部parantheses字符串之间的子字符串

时间:2018-04-20 02:36:32

标签: c# regex

我想在两个逗号之间找到一个字符串。

例如,我想将输入字符串拆分为words / substring

输入字符串:

"(ABC,pqr,xyz(I,j,k),lmn)";

预期产出:

 1. ABC
 2. PQR
 3. XYZ(I,j,k)
 4. LMN

1 个答案:

答案 0 :(得分:0)

您可以将RegEx,(?=[^\)]*(?:\(|$))

一起使用

解释

  • ,匹配字符,
  • 积极前瞻(?=[^\)]*(?:\(|$))
  • 匹配[^\)]*下方列表中不存在的单个字符
    • *量词 - 在零和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
    • \)字面匹配字符)
  • 非捕获组(?:\(|$)
    • \(字面匹配字符(
    • $在字符串末尾断言位置,或者在字符串末尾的行终止符之前断言(如果有的话)

示例

var input = "(ABC,pqr,xyz(I,j,k),lmn)";

var regex = new Regex(@",(?=[^\)]*(?:\(|$))");

// lets make easier on regex and just trim the outside parenthesis
var values = regex.Split(input.Trim(new[]{'(', ')'}));

foreach (var item in values)
    Console.WriteLine(item);

输出

ABC
pqr
xyz(I,j,k)
lmn

Full Demo Here