指定桁数のぞろ目とマッチする正規表現
ちょっとしたネタですが、仕事で正規表現を扱う機会があり、その時にゾロ目とマッチするにはどう書けばいいんだろう?と疑問に思ったので試しました。
最大桁数のゾロ目とマッチする正規表現
まず、桁数を指定せず最大桁のマッチングを考えてみます。
これは 「1文字目とのマッチング+2文字目以降とのマッチング」 、の考え方で正規表現を組み立てることで実現できました。
結果として、(\d)\1+
という表現でマッチングすることができました。
- 1文字目とのマッチング:
(\d)
- 2文字目以降とのマッチング:
\1+
\1
は1でのマッチング結果\1+
で1でマッチした文字と同じ文字が続くかを検証する
Pythonでマッチングさせるコードは下記の様に書けます。
尚、マッチングした文字列全体はm.group(0)
で取得できます。
例:1のゾロ目とのマッチング
import re
target = "111111112345"
# マッチする部分があるかチェックする
m = re.search(r"(\d)\1+", target)
# マッチした文字列全体
print(m.group(0))
# 11111111
指定した桁数のゾロ目とマッチする正規表現
次に、桁数を指定してマッチングできないかを考えてみます。
これは前節の「2文字目以降とのマッチング」を、 「2文字目以降の{桁数-1}文字のマッチング」 という考え方にすることで実現することができます。
表現としては(\d)\1{桁数-1}
となります。
例:1の6桁のゾロ目(111111
)とのマッチング
import re
target = "111111112345"
# マッチする部分があるかチェックする
m = re.search(r"(\d)\1{5}", target)
# マッチした文字列全体
print(m.group(0))
# 111111