Pythonの正規表現ライブラリre
は、文字列のパターンマッチングに使用されます。このライブラリは、Unicode文字列(str
)と8ビット文字列(bytes
)の両方をパターンとして、また検索対象の文字列として使用できます。ただし、Unicode文字列と8ビット文字列を混在させることはできません。
Pythonの正規表現では、UTF-8文字を含む文字列のマッチングに問題が生じることがあります。例えば、あるユーザーは、HTML要素を見つけるために正規表現マッチングを使用するPython/Seleniumプロジェクトで、デンマーク/ノルウェーの文字ÆØÅを含む要素属性に問題が生じたと報告しています。
この問題を解決するためには、正規表現パターンにPythonのraw文字列記法を使用します。’r’を前置した文字列リテラルではバックスラッシュが特別扱いされません。したがって、”\n”が改行一文字からなる文字列であるのに対して、r”\n”は’\’と’n’の二文字からなる文字列です。
以下に、UTF-8文字を含む文字列と正規表現のマッチングの例を示します。
#coding: utf-8
import re
pattern = re.compile(r'交易金额:(d+.?d+)元', flags=re.LOCALE)
for line in open('xx.txt'):
match = pattern.match(line)
このコードは、UTF-8でエンコードされたテキストファイルxx.txt
から行を読み取り、各行が正規表現r'交易金额:(d+.?d+)元'
にマッチするかどうかをチェックします。この正規表現は、「交易金额:」の後に数字(おそらく金額)が続き、「元」で終わる文字列にマッチします。
以上の情報を参考に、PythonとUTF-8を使用した正規表現マッチングについて理解を深め、より効果的なコードを書くことができるでしょう。