今川館

都内勤務の地味OLです

文字列リテラルは連続させられる

これは知らなかった。
文字列リテラルは連続させると一つにつながる。
例えば、

>>> print ('foo'
... 'bar'
... 'baz')
foobarbaz

↑このようになる。
(括弧はリテラル3個をひとまとめの評価にする為で、カンマで区切ってタプルにしてはいけない)

三連クォートの文字列だと途中に存在する改行文字は有効だが、
この場合は無視される(当たり前だが)。

>>> print '''foo
... bar
... baz'''
foo
bar
baz

文字列リテラル単純連続を使うメリットは正規表現を読みやすく書くときだ。
Perl, Ruby正規表現リテラルを改行文字まじりで読みやすく記述することは可能だが、Pythonでも同じことができる。

これに気がついたのはdjango.forms.fieldsのemail_reを使おうとしたとき。

[django.forms.fields]
420 email_re = re.compile(
421     r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"  # dot-atom
422     r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
423     r')@(?:[A-Z0-9]+(?:-*[A-Z0-9]+)*\.)+[A-Z]{2,6}$', re.IGNORECASE)  # domain

勉強になった。