繁体   English   中英

.split和Ruby中的正则表达式

[英].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.parseCSV.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM