[英]Ruby split pipes in regex
我已經將文件中的數據放入一個數組中,然后只保留該數組中我想要的數據,如下所示:
基本上,我想要的是獨立訪問每個列。 由於文件會不斷變化,所以我不需要硬編碼,所以我已經做到了:)。
Element0: | data | address | type | source | disable |
Element1: | 0x000001 | 0x123456 | in | D | yes |
Element2: | 0x0d0f00 | 0xffffff | out | M | yes |
Element3: | 0xe00ab4 | 0xaefbd1 | in | E | no |
我已經嘗試過使用正則表達式/\\|\\s+.*\\s+\\|/
來打印幾行(它刪除了我關心的數據)。 我也嘗試過使用/\\|.*\\|/
,它會將所有內容打印為空。 我已經搜索了split方法,並且知道發生這種情況是因為.*
刪除了我關心的數據。 我也嘗試過使用正則表達式\\|\\s*\\|
但它會打印整行。 我已經嘗試過許多正則表達式,但是目前我還沒有辦法解決這個問題。 有什么建議嗎?
`line_ary = ary_element.split(/\|\s.*\|/)
unless line_ary.nil? puts line_ary`
您應該使用csv類,而不是嘗試進行正則表達式解析。 這樣的事情會做:
require 'csv'
data = CSV.read('data.csv', 'r', col_sep: '|')
您可以將行和列作為2維數組訪問,例如,訪問第2行,第4列: data[1][3]
。
例如,如果您只想為所有行打印地址列,則可以這樣做:
CSV.foreach('data.csv', col_sep: '|') do |row|
puts row[2]
end
我可能會為此使用CSV解析器,但是如果您想使用正則表達式,並且確定不會使用|
在其中一個列值中,那么您要說:
row = line.split(/\s*\|\s*/)
因此,管道兩側的空白都將成為定界符的一部分。 例如:
> 'Element0: | data | address | type | source | disable |'.split(/\s*\|\s*/)
=> ["Element0:", "data", "address", "type", "source", "disable"]
> 'Element1: | 0x000001 | 0x123456 | in | D | yes |'.split(/\s*\|\s*/)
=> ["Element1:", "0x000001", "0x123456", "in", "D", "yes"]
與strip一起拆分可能是最簡單的選擇。 你嘗試過這樣的事情嗎?
"Element3:...".split(/\|/).collect(&:strip)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.