Python3.11における正規表現の書き方について

re.error: global flags not at the start of the expression

エラーにあるとおり、global flag => (?i) が先頭にないからです。

pythonの正規表現のフラグの書き方は、公式だとちょとわかりにくいのですが、たとえば以下のサイトで解説されていますが、 質問の書き方だと (?i)は全体にかかることになります
https://www.javadrive.jp/python/regex/index17.html

そして、3.11では、それを明確にするために、先頭に書かなければならなくなりました。
。なので、正しくは以下のようになります。

python

1code = re.sub(r'(?i)\d{4,6}yen|\d{4,6}pon|http.*? ', " ", code )

また、 「pon」のところだけ効かせたいのであれば、以下のようにすることになります。(これは以前からそういう仕様です。

python

1code = re.sub(r'\d{4,6}yen|\d{4,6}(?i:pon)|http.*? ', " ", code )

コメントを投稿

0 コメント