正規表現は元々ASCIIコードの文字列を念頭に置いた処理であったがUnicodeへの拡張がされている。
- \d:これは任意の 10 進数字にマッチする。Unicodeへの拡張で半角数字、全角数字にマッチする。
>>> print(re.findall(r'\d+','2021年6月十五日'))
['2021', '6']
漢数字にはマッチしない。半角数字のみでは[0-9]の範囲指定、全角数字のみでは[0-9]の範囲指定を使う。
- \D:これは\dの補集合にマッチする。
- \w:英数字にマッチする。Unicodeへの拡張では殆んど全ての文字にマッチする。ひらがなのみにマッチさせるのは[あ-ん]を使う。カタカナは[ア-ン]を使う。
>>> print(re.findall(r'[あ-ん]+','雨ニモ負ケズ、風にも負けず'))
['にも', 'けず']
>>> print(re.findall(r'[ア-ン]+','雨ニモ負ケズ、風にも負けず'))
['ニモ', 'ケズ']
注)Unicode表に沿えばひらがなの範囲は[ぁ(小書きのあ)-ゖ(小書きのけ)]であるが伝統的にはひらがなは「あ」で始まり「ん」で終わるべきだ。
ひらがなカタカナをマッチングから外すには補集合表示が使える。
>>> print(re.findall(r'[^あ-んア-ン]+','雨ニモ負ケズ、風にも負けず'))
['雨', '負', '、風', '負']
- \W:これは\wの補集合にマッチする。
- 小さい「っ」・大きい「つ」の区別
>>> print(re.findall(r'.っ','はっきり、つめる'))
['はっ']
>>> print(re.findall(r'.つ','はっきり、つめる'))
['、つ']
- 全角空白・半角空白
>>> print(re.findall(r' .','これは 全角、これは 半角'))
[' 半']
>>> print(re.findall(r' .','これは 全角、これは 半角'))
['\u3000全']
- 句読点
>>> print(re.findall(r'.。|.、','おお、寒い。'))
['お、', 'い。']
以上、Unicodeの扱いを纏めてみた。