正则表达式用逗号分隔字符串忽略函数语法

时间:2018-05-20 19:17:26

标签: regex scala

我需要一个正则表达式,通过查看逗号来替换字符串 例如字符串:

str1 = "a,b,12,func(a,b),8,bob,func(1,2))"

应转换如下:

str1_transformed = "a;b;12;func(a,b);8;bob;func(1,2))"

我无法用“;”代替每一个“,”因为它看起来像:

str1_wrong = "a;b;12;func(a;b);8;bob;func(1;2))"

我该如何处理? 我看了下面的线程没有成功:
How can I Split(',') a string while ignore commas in between quotes?
Regular Expression for Comma Based Splitting Ignoring Commas inside Quotes

1 个答案:

答案 0 :(得分:3)

如果你知道你不会在下面使用不平衡或转义括号,那么regex运行良好:

,(?![^()]*\))

故障:

  • ,匹配逗号
  • (?!开始否定前瞻
    • [^()]*\)这意味着,最近匹配的逗号不应该在没有匹配左括号的情况下关闭括号
  • )前瞻结束

C#代码:

Regex regex = new Regex(@",(?![^()]*\))");
string result = regex.Replace(@"a,b,12,func(a,b),8,bob,func(1,2))", @";");