これは私にエラーも答えも与えません。
re.sub('\\.(\\W|\\.)*[o0](\\W|[o0])*', '*', '..........................................')
なぜそのように振る舞うのですか?また、「ピリオド」の量を減らすと、機能します。
ありがとうございました。
これは私にエラーも答えも与えません。
re.sub('\\.(\\W|\\.)*[o0](\\W|[o0])*', '*', '..........................................')
なぜそのように振る舞うのですか?また、「ピリオド」の量を減らすと、機能します。
ありがとうございました。
o
入力文字列にorがありませ0
んが、正規表現にはこれらの文字の少なくとも 1 つが必要です ( [o0]
)。
>>> re.compile('\\.(\\W|\\.)*[o0](\\W|[o0])*', re.DEBUG)
literal 46
max_repeat 0 65535
subpattern 1
branch
in
category category_not_word
or
literal 46
in
literal 111
literal 48
max_repeat 0 65535
subpattern 2
branch
in
category category_not_word
or
in
literal 111
literal 48
更新: あなたの正規表現は壊滅的なバックトラッキングに悩まされています。ネストされた文字クラスまたは文字セットの組み合わせを、ワイルドカードを含むグループ (上記branch .. or
の a 内の部分) で使用しないでください。max_repeat
これを回避するために、文字クラスを文字セット内に配置できます。
r''
また、生の文字列表記を使用して、エスケープされたすべてのバックスラッシュを回避できることに注意してください。
以下の作品:
re.sub(r'\.[\W\.]*[o0][\Wo0]*', '*', '..........................................')
コンパイルすると次のようになるためです。
>>> re.compile(r'\.[\W\.]*[o0][\Wo0]*', re.DEBUG)
literal 46
max_repeat 0 65535
in
category category_not_word
literal 46
in
literal 111
literal 48
max_repeat 0 65535
in
category category_not_word
literal 111
literal 48
ブランチがなくなったことに注意してください。