Gsub - 正则表达式:替换引号或括号

时间:2015-07-16 11:24:03

标签: ruby regex gsub regex-lookarounds

我试图编写一个标识所有逗号的正则表达式,但有一些例外:

  • 两个" -signs之间的逗号应该被忽略
  • 括号[]之间的逗号应忽略

使用¤将其替换为某些特殊字符(例如gsub)。

所以对于这个例子:

something=somethingElse, someThird="this is, a message with a comma!", someFourth=[ this, is, some, list ]

我想要以下结果:

something=somethingElse¤ someThird="this is, a message with a comma!"¤ someFourth=[ this, is, some, list ]

我找到了一些标识这些逗号的正则表达式(如下面的答案中所示),但似乎都不适用于gsub(它们替换太多或根本没有...)

1 个答案:

答案 0 :(得分:2)

只要引号和括号是平衡的并且没有转义的实例,就可以使用此正则表达式进行前瞻:

/,(?=(([^"]*"){2})*[^"]*$)(?![^\[]*\])/g

RegEx Demo

更新:以下是红宝石代码:

str = 'something=somethingElse, someThird="this is, a message with a comma!", someFourth=[ this, is, some, list ]';

print str.split(/\s*,(?=(?:(?:[^"]*"){2})*[^"]*$)(?![^\[]*\])\s*/);

<强>输出:

["something=somethingElse", "someThird=\"this is, a message with a comma!\"", "someFourth=[ this, is, some, list ]"]

Online Code demo