5

我正在尝试通过正则表达式拆分参数列表。

这是我的参数列表的字符串:

"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 不允许动态范围的后视,所以这不起作用:

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

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

4

2 回答 2

8

也许这样的东西对你有用:

 str.scan(/(?:\[.*?\]|[^,])+/)

三思后编辑。

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

于 2013-06-20T16:07:03.603 回答
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
于 2013-06-20T16:09:21.290 回答