這裏有一對夫婦,你能做到這一點的方式。
#1在每一行上使用String#split,然後修復行的末尾。
def split_em(str)
arr = str.split(?|).map { |s| "|#{s}|" }
arr[-1] << (arr.pop).tr(?|,'') unless str[-1] == ?|
arr
end
split_em("dff cee|def gfe|dff cee|dfe dBA|dff cee|def gfe|faf gfe|1 dfe dBA:|2 dfe dcB|]")
#=> ["|dff cee|", "|def gfe|", "|dff cee|", "|dfe dBA|", "|dff cee|",
# "|def gfe|", "|faf gfe|", "|1 dfe dBA:|", "|2 dfe dcB|]"]
split_em("~A3 B3|gfe fdB|AFA B2c|dfe dcB|~A3 ~B3|efe efg|faf gfe|1 dfe dcB:|2 dfe dBA|]")
#=> ["|~A3 B3|", "|gfe fdB|", "|AFA B2c|", "|dfe dcB|", "|~A3 ~B3|",
# "|efe efg|", "|faf gfe|", "|1 dfe dcB:|", "|2 dfe dBA|]"]
split_em("fAA eAA|def gfe|fAA eAA|dfe dBA|fAA eAA|def gfe|faf gfe|dfe dBA:|")
#=> ["|fAA eAA|", "|def gfe|", "|fAA eAA|", "|dfe dBA|",
# "|fAA eAA|", "|def gfe|", "|faf gfe|", "|dfe dBA:|"]
#2應用正則表達式的每一行創建一個數組,然後修改數組
def split_em(str)
str.scan(/(?<=^|\|).+?\|(?:[^|]*?$)?/).map { |s| "|#{s}" }
end
(?<=^|\|)
的每個元素是正回顧後其中的開頭相匹配行或|
。
.+?
抓住一個或多個字符的非貪婪地(以不吞噬的行的其餘部分),則匹配|
,然後,如果存在的話(在?
用於非捕獲基),比其他零多個字符|
直到行尾。
map
將|
添加到數組中每個字符串的開頭。用於改進正則表達式
打開挑戰:
- 它,而不是施加到每一行,它適用於包含有所有行上的字符串,返回包含用於每個行字符串數組的數組。
- 消除
map
。
http://ruby-doc.org/core-1.8.7/String.html這裏是RUBY – Eda 2014-11-01 20:27:27
類似的操作由於的描述|在這種情況下角色只能作爲視覺和語法分隔符,你並不需要捕獲它,是嗎?您可以捕捉集合{'def gfe','dff cee','dfe dBA',(...),'1 dfe dBA:','2 dfe dcB'|}並假設條形碼字符。 (好調,順便說一句) – 2014-11-01 20:30:45
的事情是|分隔符可以與其他字符捆綁(例如:[|,||,| :,:|,...等),所以我需要捕獲它們。 – 2014-11-01 20:48:01