我正在尝试通过正则表达式拆分参数列表。
这是我的参数列表的字符串:
"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*\])/
如何告诉正则表达式忽略方括号中的所有内容?
也许这样的东西对你有用:
str.scan(/(?:\[.*?\]|[^,])+/)
三思后编辑。
在某些嵌套括号的情况下,简单的非贪婪匹配器会失败。
与其尝试使用一个拆分正则表达式来完成所有工作,不如拆分,然后更正您的配对数组。
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