正規表現の覚書

Pythonの re モジュールを使って、文字列のsplit関数と同じような処理をさせる
方法の覚書です。

たとえば、

'01234 aaaa b1c2d4 "aaa/bbb ccc/dddd/eeee"'

を半角スペースの位置で分割したいのですが、ダブルクォートで囲まれた部分は
半角スペースがあっても分割したくない場合、split関数ではうまくいきませんよね。(そうですよね!?)

で、re モジュールを使って以下のようにしたところ、うまい具合に分割できました。

import re

s = '01234 aaaa b1c2d4 "aaa/bbb ccc/dddd/eeee"'
expr = re.compile(r'\"[^\"]*\"|[^\s]+')
tokenList = expr.findall(s)


正規表現

r'\"[^\"]*\"|[^\s]+'

は、「ダブルクォートで囲まれている文字列または、空白でない1文字以上の文字列」
という意図で。


上記のtokenListの内容は

['01234', 'aaaa', 'b1c2d4', '"aaa/bbb ccc/dddd/eeee"']

となります。

今日もいい勉強になりました。