2012-11-27 158 views
2

如何從掃描和拆分兩種形式的字符串中獲得結果 - 正面和負面匹配?相當於掃描並拆分字符串

def scan_and_split(string, regexp) 
    string.split(regexp).zip(string.scan(regexp)) 
end 

scan_and_split("{T}: Add {W} or {U} to your mana pool. Adarkar Wastes deals 1 damage to you.", /\{[^ ]+\}/) 

預期輸出:

[["", "{T}"], [": Add ", "{W}"], [" or ", "{U}"], [" to your mana pool. Adarkar Wastes deals 1 damage to you.", nil]] 
+0

請向我們展示您期待的輸出。 –

回答

1

使用split與捕獲。

"ababab".split(/(a)/) 
# => ["", "a", "b", "a", "b", "a", "b"] 

"{T}: Add {W} or {U} to your mana pool. Adarkar Wastes deals 1 damage to you.".split(/(\{[^ ]+\})/) 
# => ["", "{T}", ": Add ", "{W}", " or ", "{U}", " to your mana pool. Adarkar Wastes deals 1 damage to you."] 

如果你想爲每個split/match子陣列,然後應用到each_slice(2).to_a的結果。

"ababab".split(/(a)/).each_slice(2).to_a 
# => [["", "a"], ["b", "a"], ["b", "a"], ["b"]] 

"{T}: Add {W} or {U} to your mana pool. Adarkar Wastes deals 1 damage to you.".split(/(\{[^ ]+\})/).each_slice(2).to_a 
# => [["", "{T}"], [": Add ", "{W}"], [" or ", "{U}"], [" to your mana pool. Adarkar Wastes deals 1 damage to you."]]