mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

【Python】正規表現を使ってヒットした文字に何かつっつけたい

python3でやっています。正規表現を使ってヒットした文字に、何かくっつけるメモです。つけ方の答えを先に言うと、以下のようになります。マッチした文字に「hogehoge」を足す場合です。

replaced_text = re.sub(r'(やりたい正規表現)', r'\1hogehoge', text)

大事なポイントは以下です。 ・第一引数の正規表現をかっこで囲うこと ・第二引数で「r'\1'」をくっつけること 私はこの第一引数のかっこで引っかかってエラーを出しました。

どうやって文字をくっつけるか

「re」っていうライブラリを使って、 第二引数に「r'\1hogehoge'」っていうことをすればいいらしいです。 早速やってみたのですが。。。

ヒットの結果 = re.sub(ここに正規表現, r'\1hogehoge', ヒットさせたい文字)

エラーが出ました。

メッセージは以下です。

Traceback (most recent call last):
  File "/usr/lib/python3.5/sre_parse.py", line 938, in expand_template
    literals[index] = g(group) or empty
IndexError: no such group
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "hoge.py", line 17, in <module>
    replaced_val = re.sub(r'<.*?>', r'\1@', replaced_val)
  File "/usr/lib/python3.5/re.py", line 182, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "/usr/lib/python3.5/re.py", line 330, in filter
    return sre_parse.expand_template(template, match)
  File "/usr/lib/python3.5/sre_parse.py", line 940, in expand_template
    raise error("invalid group reference")
sre_constants.error: invalid group reference

で、第二引数に「r'\1hogehoge'」を書けばよいと書いているわけですが それだけでなく、正規表現のヒットさせたい部分をかっこで囲わなければいけませんでした。

matchはかっこがなくても正規表現が機能したので、第一引数のかっこのことはさっぱり疑っていませんでした。

re.macth(r'やりたい正規表現', text)

ですので、気をつけましょう。

r'やりたい正規表現'
r'(やりたい正規表現)'

参考

https://stackoverflow.com/questions/20735384/regex-python-adding-characters-after-a-certain-word