[英].split and regular expression in Ruby
我想用(',')分割我的字符串,但是如果它们在引号内,则忽略','。 例如
" 2,2,4,'hello', 'world', 'hi, there' "
我想将其拆分为“嗨,在ruby中不会拆分为两个不同的数组元素”。 我怎样才能做到这一点? 可能使用一些正则表达式?
编辑:如果我使用此,(从链接到可能的重复)
values = values.split(',(?=([^\\"]*\\"[^\\"]*\\")*[^\\"]*$)', -1)
我的字符串正确分割,但是现在我不能在数组上使用.delete_at()方法。 在我可以做之前:
values.delete_at(20)
很好。 从这个答案中得到启发,您正在寻找的正则表达式为:
values.split(/,(?=(?:[^']*'[^']*')*[^']*$)/)
例如,如果转义了引号,则此方法将无效( eg "'O\\'Reilly\\'s car'"
)。
但是,这看起来有点像XY问题。 如果您想解析CSV(看起来好像),并且这是兼容的CSV,则可以使用CSV.parse
或CSV.parse_line
。 并不是因为列分隔符之间有多余的空间。 如果可能,使用标准格式和标准解析器几乎总是比本地解决方案更可取。
这是一个非正则表达式的解决方案:
str = " 2,2,4,'hello', 'world', 'hi, there' "
first_quote_read = false
str.each_char.with_object (['']) do |c,a|
if c == ?, && !first_quote_read
a << ''
else
a[-1] << c
first_quote_read = !first_quote_read if c == ?'
end
end
#=> [" 2", "2", "4", "'hello'", " 'world'", " 'hi, there' "]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.