我正在尝试通过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*\])/
如何告诉正则表达式忽略方括号中的所有内容?
答案 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