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

1 に答える 1

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."]]
于 2012-11-27T07:52:13.637 に答える