正規表現と raw文字列
Pythonで正規表現を使うときに raw文字列(r"...") を使うのは、実はほぼ必須といっていいくらい大事なんです。初心者向けに整理してみます。
1. なぜ raw文字列を使うの?
正規表現では \d(数字)、\s(空白)、\w(英数字やアンダースコア)など、バックスラッシュを含むパターンをよく使います。
でも、Pythonの通常の文字列では \ が「エスケープ記号」として解釈されてしまいます。
- 例:
"\n"は「改行」になってしまう
👉 そこで raw文字列 を使うと、\ をそのまま扱えるので、正規表現が書きやすくなるのです。
2. 例題で理解しよう
例題1: 数字を探す
import re
text = "abc123def456"
# 通常の文字列で書く場合(ややこしい)
pattern1 = "\\d+" # \d+ を表すには \\d+ と書かないといけない
print(re.findall(pattern1, text)) # ['123', '456']
# raw文字列で書く場合(シンプル!)
pattern2 = r"\d+"
print(re.findall(pattern2, text)) # ['123', '456']
Python👉 r"\d+" と書けば、\d+ をそのまま書けるので読みやすい。
例題2: 空白で分割
import re
text = "apple orange banana"
# 空白文字にマッチする \s+
pattern = r"\s+"
print(re.split(pattern, text))
# 出力: ['apple', 'orange', 'banana']
Python👉 \s+ は「1つ以上の空白」を意味します。raw文字列を使うとそのまま書けます。
例題3: バックスラッシュを含む文字列
import re
text = r"C:\Users\Python\test"
# バックスラッシュを探す
pattern = r"\\"
print(re.split(pattern, text))
# 出力: ['C:', 'Users', 'Python', 'test']
Python👉 \\ で「バックスラッシュ1つ」にマッチします。
正規表現でも \ は特別な意味を持つので、\\ と書く必要があります。
でも raw文字列を使わないと "\\\\“ と4つ書かないといけなくなり、さらにややこしくなります。
3. まとめ
- 正規表現では
\d,\s,\wなど バックスラッシュを多用する - 通常の文字列だと
\\dのように二重に書かないといけない - raw文字列(
r"...")を使えば、\dとそのまま書ける - 読みやすく、ミスも減るので、正規表現では基本的に raw文字列を使うのがベスト
👉 ここまでで「なぜ raw文字列が正規表現で便利なのか」が分かったと思います。
