Python では,ある文字列が別の文字列に含まれているかどうかを調べるには in
を使うことができます。例えば "げほ" in "ほげほげ"
の値は True になります。
このような文字列照合をさらに拡張した仕組みが正規表現(regular expression)です。
よく使うコマンド grep も正規表現で文字列を検索するツールです。grep の語源は諸説ありますが,真ん中の re は regular expression を意味しています。
Python で正規表現を扱うためには,標準ライブラリ re(日本語ドキュメント)またはサードパーティのライブラリ regex を使います。以下では re を使います。
次の例での正規表現は "げほ" という単純な文字列です。
import re if re.search("げほ", "ほげほげ"): print("「げほ」は「ほげほげ」に含まれます") else: print("「げほ」は「ほげほげ」に含まれません") m = re.search("げほ", "ほげほげ") m.span() # 一致位置を表すtuple (1, 3)
先頭は ^
,末尾は $
,任意の1文字は .
,任意の0文字以上は .*
で表します。括弧はグルーピングを意味します。
正規表現 ^ほげ(.*)$
は,先頭に「ほげ」があるパターンを表します。「ほげ」以下の末尾までは括弧で囲んでありますので一つのグループです。
m = re.search("^ほげ(.*)$", "ほげふが") m # 一致しなければ偽 m[0] # 一致全体「ほげふが」 m[1] # 1番目のグループ「ふが」 m = re.search("^ほげ(.*)へ(.*)$", "ほげふがへろへろ") m[0] # 一致全体「ほげふがへろへろ」 m[1] # 1番目のグループ「ふがへろ」 m[2] # 2番目のグループ「ろ」
.*
はできるだけ長い任意の文字列にマッチします。.*?
はできるだけ短い任意の文字列にマッチします。
m = re.search("^ほげ(.*?)へ(.*)$", "ほげふがへろへろ") m[0] # 一致全体「ほげふがへろへろ」 m[1] # 1番目のグループ「ふが」 m[2] # 2番目のグループ「ろへろ」
0から9までの数字(半角)は [0-9]
、0から9までの数字(全角)は [0-9]
で表します。任意の数字(半角・全角)は \d
で表します。直前の正規表現の1個以上の連なりは +
を付けて表します。
re.search("[0-9]+", "two22二")[0] # '2' re.search("[0-9]+", "two22二")[0] # '2' re.search("\d+", "two22二")[0] # '22'
Last modified: