概要
reモジュールではre.RegexObject
クラスが定義されている。パターン文字列をコンパイルするとRegexObject
のオブジェクトが生成され、そのパターンはそのプロパティとして保持される。このクラスの各メソッドで、パターンを任意のテキストに適用する。
reモジュール関数を使う場合は実行のたびにパターン文字列とフラグを指定し、その都度コンパイルされる。一方、正規表現オブジェクトのメソッドを使う場合は、一度パターンをコンパイルしておけば、その後の操作でコンパイルのオーバーヘッドが生じない。フラグはコンパイル時に指定する。
1 2 3 4 5 6 7 8 9 |
import re regex = re.compile(r'life') print(regex.search("Love the life you live.")) # <_sre.SRE_Match object; span=(9, 13), match='life'> print(regex.search("Live the life you love.")) # <_sre.SRE_Match object; span=(9, 13), match='life'> |
パターンの検索
search()
regex.search(string,[ pos[, endpos]])
re.search()
関数と同じ機能で、string
の任意の位置で、最初にregex
にマッチした時にMatchObject
のオブジェクトを返す。マッチしなければNoneを返す。
pos
は検索開始位置で先頭が0。デフォルト値は0で先頭から検索する。
endpos
は検索範囲の終了位置で、endpos-1
文字目までが検索範囲となる。デフォルトでは文字列の最後まで検索する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import re regex1 = re.compile(r'ab') regex2 = re.compile(r'cd') regex3 = re.compile(r'ef') s = r"abcdabcd" print(re.search(regex1, s)) # <_sre.SRE_Match object; span=(0, 2), match='ab'> print(re.search(regex2, s)) # <_sre.SRE_Match object; span=(2, 4), match='cd'> print(re.search(regex3, s)) # None print(regex1.search(s, 2)) # <_sre.SRE_Match object; span=(4, 6), match='ab'> print(regex1.search(s, 2, 5)) # None |
match()
regex.match(string[, pos[, endpos]])
re.match()
関数と同じ機能で、regex
がstring
の先頭でマッチするときだけMatchObject
オブジェクトを返す。pos
、endpos
はregex.search()
と同じ意味。
1 2 3 4 5 6 7 8 9 10 |
import re regex1 = re.compile(r'ab') regex2 = re.compile(r'cd') s = r"abcdabcd" print(re.match(regex1, s)) # <_sre.SRE_Match object; span=(0, 2), match='ab'> print(re.match(regex2, s)) # None |
fullmatch()
regex.fullmatch(string[, pos[, endpos]])
re.fullmatch()
関数と同じ機能で、regex
がstring
全体にマッチするときだけMatchObject
オブジェクトを返す。pos
、endpos
はregex.search()
と同じ意味。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import re s = r"abcdabcd" regex = re.compile(r'abcdabcd') print(re.fullmatch(regex, s)) # <_sre.SRE_Match object; span=(0, 8), match='abcdabcd'> regex = re.compile(r'abcd') print(re.fullmatch(regex, s)) # None regex = re.compile(r'.*') print(re.fullmatch(regex, s)) # <_sre.SRE_Match object; span=(0, 8), match='abcdabcd'> regex = re.compile(r'.{5}') print(re.fullmatch(regex, s)) # None |
findall()
regex.findall(string[, pos[, endpos]])
re.findall()
関数と同じ機能でregex
にマッチする部分列のリストを返す。pos
、endpos
はregex.search()
と同じ意味。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import re s = r"abcdabcd" regex = re.compile(r'ab') print(regex.findall(s)) # ['ab', 'ab'] regex = re.compile(r'ef') print(regex.findall(s)) # [] regex = re.compile(r'.{3}') print(regex.findall(s)) # ['abc', 'dab'] |
finditer()
regex.finditer(string[, pos[, endpos]])
re.finditer()
関数と同じ機能で、regex
にマッチする部分列のイテレータを返す。pos
、endpos
はsearch()
と同じ意味。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import re s = r"abcdabcd" regex = re.compile(r'ab') [print(x) for x in regex.finditer(s)] # <_sre.SRE_Match object; span=(0, 2), match='ab'> # <_sre.SRE_Match object; span=(4, 6), match='ab'> regex = re.compile(r'ef') [print(x) for x in regex.finditer(s)] # 空のイテレータ regex = re.compile(r'.{3}') [print(x) for x in regex.finditer(s)] # <_sre.SRE_Match object; span=(0, 3), match='abc'> # <_sre.SRE_Match object; span=(3, 6), match='dab'> regex = re.compile(r'ab') [print(x) for x in regex.finditer(s, 2, 6)] # <_sre.SRE_Match object; span=(4, 6), match='ab'> |
分割
split()
regex.split(string, maxsplit=0)
re.split
()
関数と同じ機能で、regex
にマッチする部分列でstring
を切り分ける。pos
、endpos
はsearch()
と同じ意味。
置換
sub()
regex.sub(repl, string, count=0)
re.sub()
関数と同じ機能でstring
中のregex
にマッチする部分をrepl
で置き換える。repl
には文字列を返す関数も指定可能。pos
、endpos
はsearch()
と同じ意味。
subn()
regex.subn(repl, string, count=0)
re.subn()
関数と同じ機能で、置換後にタプルで(置換後の文字列, 置換数)
を返す。pos
、endpos
はsearch()
と同じ意味。