Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

正規表現の先頭につく`r`は何ですか?エスケープシーケンスやrow文字列を解説します

f:id:kenken0326:20190612150421p:plain

こんにちは、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文字列) といいます。
rraw文字列 を指定するための リテラル です。

この場合は、 r があってもなくても同じように動作します。

特別に解釈される文字

通常の文字列ではバックスラッシュ( \ )を特別扱いして解釈します。
例えば "\n" のように書くと「改行」とPythonに解釈されます。
このように \ に特定の文字を書くと特別に解釈される文字を エスケープシーケンス と呼びます。

正規表現を使う場合にその挙動が手間になる場合があるので、正規表現のパターンを書く際に raw string ( r"..." のような文字列)を使っています。

r をつけなくても同じ結果になる理由

今回の正規表現にもバックスラッシュ( \ )は存在しています。しかし、 \d は正規表現の特殊シーケンスで、エスケープシーケンスではありませんので、 r をつけなくても同じ結果になります。

Python では正規表現を使用する場合は r を使用することが推奨されています。 少し長いですが公式ドキュメントの冒頭の説明が参考になります。

docs.python.org

Copyright ©2017-2019 BeProud Inc. All rights reserved.