こんにちは、PyQサポートです。
今日は、正規表現を指定する文字列についている r
について紹介します。
質問
if not re.match(r'\d\d\d-\d\d\d\d$', columns[1]): のr'\d\d\dのrですが、なくても同じ結果が出ます。そのrの機能を教えて頂けますでしょうか。
回答
正規表現の先頭にrをつけた文字列を raw string(raw文字列) といいます。
r
は raw文字列 を指定するための リテラル です。
この場合は、 r
があってもなくても同じように動作します。
特別に解釈される文字
通常の文字列ではバックスラッシュ( \
)を特別扱いして解釈します。
例えば "\n"
のように書くと「改行」とPythonに解釈されます。
このように \
に特定の文字を書くと特別に解釈される文字を エスケープシーケンス と呼びます。
正規表現を使う場合にその挙動が手間になる場合があるので、正規表現のパターンを書く際に raw string ( r"..." のような文字列)を使っています。
r
をつけなくても同じ結果になる理由
今回の正規表現にもバックスラッシュ( \
)は存在しています。しかし、 \d
は正規表現の特殊シーケンスで、エスケープシーケンスではありませんので、 r
をつけなくても同じ結果になります。
Python では正規表現を使用する場合は r
を使用することが推奨されています。
少し長いですが公式ドキュメントの冒頭の説明が参考になります。