2018/12/14更新

[Python] 正規表現で、改行を含む文字列をマッチさせる

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
正規表現で文字列を扱う際に、改行が含まれる場合は少し考慮が必要です。今日はその対応方法をブログに書きたいと思います。



Pythonの正規表現について

Pythonの正規表現の使い方は、「[Python] 正規表現まとめ」をご参照ください。



何がしたいのか

例えば、以下のようなHTMLがあり、そこからaタグを抜き出したいとします。
<div>
    <a href="https://www.yoheim.net">
        ブログへのリンク
    </a>
</div>
見ての通り、HTML全体、そしてaタグにも改行が含まれており、改行を考慮して正規表現にマッチさせる必要があります。

下記のように正規表現を書くと、改行を含む箇所が正しくヒットしません。
import re

# html
html = """
<div>
    <a href="https://www.yoheim.net">
        ブログへのリンク
    </a>
</div>
"""

# aタグを取り出したい.
matches = re.findall('(<a.*?</a>)', html)

print(matches)  # []  <= 何もヒットしていない
改行が含まれるため、残念ながらヒットしません。



改行を含めてマッチさせる

改行を含めてマッチさせるためには、.*?のところを(.|\s)*?に変更します。
import re

# html
html = """
<div>
    <a href="https://www.yoheim.net">
        ブログへのリンク
    </a>
</div>
"""

# aタグを取り出したい.
matches = re.findall('(<a(.|\s)*?</a>)', html)

print(matches)
# [('<a href="https://www.yoheim.net">\n        ブログへのリンク\n    </a>', ' ')]
そうすると、改行も含めてマッチさせることができました。
正規表現の\sは余白を示す正規表現で改行コードにもマッチします。詳細は「6.2. re — 正規表現操作」を参照ください。



最後に

改行を含む文字列に対して正規表現を使うことは、仕事でも時々あるので、ブログにも書きました。知っているとサクッとできて便利です。

最後になりますが本ブログでは、Python、フロントエンド、PHP、サーバー、インフラ、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSTwitterをフォローして貰えたら嬉しいです ^ ^

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。