扫描并拆分字符串

时间:2012-11-27 07:45:50

标签: ruby

如何从扫描和拆分中获得结果字符串 - 正面和负面匹配?相当于

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]]

1 个答案:

答案 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."]]