何度もグループに一致させたい。何度もシーケンスを一致させる
import re
re.findall(r'\\x\w{2}',"echo -e '\\x6b\\x61\\x6d\\x69' random \\x6b\\x61")
>> ['\\x6b', '\\x61', '\\x6d', '\\x69', '\\x6b', '\\x61']
これは私に予想される配列の結果を与えます。しかし、
re.findall(r'(\\x\w{2})+',"echo -e '\\x6b\\x61\\x6d\\x69' random \\x6b\\x61")
>> ['\\x69', '\\x61']
つまり、16進数の各セットの最後の一致。私は+
を持っていれば少なくとも一度はグループに合っていると思っていたが、これは明らかではない。私はこれが私に['\\x6b\\x61\\x6d\\x69','\\x6b\\x61']
を与えてくれることを望んでいました。
私はここで何が間違っていますか?
あなたが+
でパターンを繰り返すように
?:
で
\\x\w{2}
の非キャプチャグループを作成し、その後
が((?:\\x\w{2})+)
\\x\w{2}
として一つ以上の連続したパターンをキャプチャする必要があり、パターンを掛けキャプチャすることができます
私が間違っている場合は私を修正してください。この全体のどれもがグループを捕らえていない、それはキャプチャグループとして外側のパルテシスに焦点を当てているのだろうか? –
非キャプチャグループは、直前の文字の代わりにパターン全体に '+'を適用するためのものです。外側のパターンをキャプチャしたいだけなので、内部グループ*を非キャプチャ*にする必要があります。 – Psidom