ここでは正規表現(1),(2)に続いて
その他の便利機能について整理します。
コンパイル
今まではre.match("正規表現","対象文字列")
と直接、正規表現を渡していました。
しかし、ループなど繰り返しの中でこれを使うと処理量が増えて速度を低下させます。
正規表現パターンをコンパイルしておくことで、この処理を削減することが可能になります。
import re reg = re.compile("aba") text = [対象の文字列群] for t in text: rtn = reg.match(t) if rtn: rtn.start()
コンパイルした正規表現でも、match,search,findall,split等が使用可能です。
イテレーター
findall
はマッチするものを全て返してくれて便利ですが、
リストの中身が膨大になる場合は非効率です。
finditer
を使用し、イテレーターにすることで、
メモリの圧迫を防ぐことが可能です。
for res in re.finditer("正規表現","大きい文字列"): print res
sub
sub
はパターンにマッチしたものを置き換えます。
count
で何個までを置き換えるかを決定できます。
(0または省略した場合は全て)
re.sub("ab","c","ababaaab",count = 0) #ccaac re.sub("ab","c","ababaaab",count = 1) #cabaaab
sub
は置き換え文字のところに関数を渡すことが可能です。
これを用いることで、正規表現のみでは解決できない、
複雑な置き換えが可能になります。
def compress(matchobj): num = len(matchobj.group()) return str(num) + "a" re.sub("a+",compress,"ababaaab") # 1ab1ab3ab