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