Ruby正则表达式匹配逗号,但忽略括号中的逗号

时间:2013-06-20 15:53:25

标签: ruby regex

我正在尝试通过regexp拆分参数列表。

这是一个带有参数列表的字符串:

"a = b, c = 3, d = [1,3,5,7], e, f = g"

我想要的是:

["a = b", "c = 3", "d = [1,3,5,7]", "e", "f = g"]

我尝试了前瞻,但Ruby不允许具有动态范围的lookbehinds,所以这不起作用:

/(?<!\[),(?!\w*\])/

如何告诉正则表达式忽略方括号中的所有内容?

2 个答案:

答案 0 :(得分:7)

也许这样的事情对你有用:

 str.scan(/(?:\[.*?\]|[^,])+/)
经过深思熟虑后,

编辑

在某些嵌套括号中,简单的非贪婪匹配器会失败。

答案 1 :(得分:2)

不是试图通过一个拆分正则表达式来完成所有操作,而是可以拆分,然后更正你的数组。

input = "a = b, c = 3, d = [1,5], e = f"
pairs = input.split(/,\s*/)
pairs.each_with_index do |item, index|
  if index > 0 && (item =~ /=/).nil?
    pairs[index - 1] += ',' + item
    pairs[index] = nil
  end
end
pairs.delete_if { |item| item.nil? }
puts pairs

输出:

a = b
c = 3
d = [1,5]
e = f