レシピ追加、正規表現を分割して記述する
『073:正規表現を分割して記述する』を追加。 % 演算子の文字列演算で問題なし。
import re regex1 = 'aaa' regex2 = 'bbb' regex = re.compile('%s|%s' % (regex1, regex2))
味付けは正規表現オブジェクトの pattern 属性で。コンパイル済みのオブジェクトからパターン文字列を取り出せる。これで編集しなおしたりくっつけたりできる。後はコンパイルしなおせば OK 。
import re regex1 = re.compile('aaa') regex2 = re.compile('bbb') regex = re.compile('%s|%s' % (regex1.pattern, regex2.pattern))
連結方法に一工夫入れてみる。 Python 2.6, 3.0 で導入された format メソッドとか。
regex = re.compile( '%(regex1)s|%(regex2)s' % dict( regex1=regex1.pattern, regex2=regex2.pattern))
regex = re.compile( '{regex1}|{regex2}'.format(regex1=regex1.pattern, regex2=regex2.pattern))
regex = re.compile( '{regex1.pattern}|{regex2.pattern}'.format(regex1=regex1, regex2=regex2))
締めは locals 関数。 __init__ の記述とかに使われていそうなあいつで。
class Spam(object): def __init__(self, spam, ham, eggs): # self.spam = spam とか並べる代わりに locals 関数 for attr, value in locals().items(): if attr != 'self': setattr(self, attr, value)
% 演算子と locals の組み合わせではかえって複雑化する今回の例でも、 format メソッドと locals ならしっくりくる。 Python 2.6以降や 3.0以降の普及が待ち遠しいぜ。
regex = re.compile( '{regex1.pattern}|{regex2.pattern}'.format(**locals()))