簡體   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