私はパターンpat='dd|dddd'
を使用していましたが、私はそれがddかddddと一致すると考えました。正規表現
import re
re.search(pat,'ddd')
re.search(pat,'ddddd')
そのような理由で任意の数のd(s)が一致するのはなぜですか?
私はパターンpat='dd|dddd'
を使用していましたが、私はそれがddかddddと一致すると考えました。正規表現
import re
re.search(pat,'ddd')
re.search(pat,'ddddd')
そのような理由で任意の数のd(s)が一致するのはなぜですか?
何とか正規表現をアンカーする必要があります。正規表現は文字列内を検索してパターンを検索します。したがって、 "dd"はオフセット0,1,2,3,4,5,6の "dddddddd"にあります。
文字列全体を一致させる場合は、^dd$
を試してください。 ^は文字列の先頭に一致し、$は最後に一致します。したがって、^(dd|dddd)$
はあなたが望む動作をします。
文字列内でddまたはddddにのみ一致させたい場合。 [^d](dd|dddd)[^d]
これは "d以外のもの"と一致し、次に "d以外のもの"のいずれか2つまたは4つのdsに一致します
既に述べたように、search
は実際にあなたが使用すべき機能です。 match
またはfindall
を使用してみてください。
>>> import re
>>> re.match('dd|dddd','dd').group()
'dd'
>>> re.findall('dd|dddd','dd')
['dd']
>>> re.match('dd|dddd','ddddd').group()
'dd'
>>> re.match('dddd|dd','ddddd').group()
'dddd'
既に与えられた回答に加えて、文字列の先頭を超えて一致を見つけるのを避けるために、 're.search'の代わりに' re.match'を使うことを検討してください。 (あなたはまだあなたの望む行動を得るために最後を固定する必要があるので、それらの他の答えに注意を払う必要があります) –