正規表現で2桁整数を範囲指定する方法

2020/02/07

Python 自然言語処理

t f B! P L
以下のような飛び飛びのファイル番号から10番台(10~19)のファイルのみを抜き出したい場合を考えます。

text = "file1 file3 file9 file10 file13 file15 file16 file19 file20 file23"

ダメな例

re.findall("file[10-19]", text) # ['file1', 'file9', 'file1', 'file1', 'file1', 'file1', 'file1']

[]内は1文字ごとに区切られるため2桁を表現できません。
例外として、1桁のみハイフンによる連番表記が可能です。
この場合は、1 or 0~1 or 9という正規表現になってしまいます。


良い例

re.findall("file1[0-9]", text) # ['file10', 'file13', 'file15', 'file16', 'file19']

10の位を[]の外に追い出せばOKです。
1の位の連番を[]内で表現します。

QooQ