はじめに
re.compileが何のためにあるのかよくわからず使っていなかったが、正規表現のパターンを再利用するときに便利であることがわかったのでまとめる。
目次
re.compileの使い方
re.compile
は正規表現のパターンをオブジェクト化する手法。re.compile
で定義した正規表現のパターンは、re.XXX
で使用できる。reの部分を定義したオブジェクトに置き換えて使用する。例えばP = re.compile(r'[0-9]+')
でPというオブジェクトを定義すると。
オブジェクト使う | オブジェクト使わない |
---|---|
P.search(string) | re.search(r'[0-9]+', string) |
P.match(string) | re.match(r'[0-9]+', string) |
P.split(string) | re.split(r'[0-9]+', string) |
P.sub(repl, string) | re.sub(r'[0-9]+', repl, string) |
import re
# a~zの文字列の正規表現パターンをオブジェクト化
alphabet_atoz = re.compile(r'[a-z]+')
print(f'# {alphabet_atoz=} / {type(alphabet_atoz)}')
# alphabet_atoz=re.compile('[a-z]+') / <class 're.Pattern'>
#オブジェクトを使って、 re.match()をする。
str_data = "ABCDEabcdeあいうえお01234"
print(f'# {alphabet_atoz.search(str_data)=}')
# alphabet_atoz.search(str_data)=<re.Match object; span=(5, 10), match='abcde'>
正規表現のパターンをオブジェクトを辞書にしてみる。
オブジェクトを辞書化することもできた。使い道はパッと思いつかないけど、よく使う正規表現パターンを辞書化しておいて、再利用すると便利かも。
import re
# パターンを辞書で定義。
P_char={
"半角小文字":re.compile(r'[a-z]+'),
"半角大文字":re.compile(r'[A-Z]+'),
"半角英字" :re.compile(r'[a-z|A-Z]+'),
"半角数字" :re.compile(r'[0-9]+')
}
str_data = "ABCDEabcdeあいうえお01234"
print(P_char["半角小文字"].search(str_data))
print(P_char["半角大文字"].search(str_data))
print(P_char["半角英字"].search(str_data))
print(P_char["半角数字"].search(str_data))
# <re.Match object; span=(5, 10), match='abcde'>
# <re.Match object; span=(0, 5), match='ABCDE'>
# <re.Match object; span=(0, 10), match='ABCDEabcde'>
# <re.Match object; span=(15, 20), match='01234'>
以上