正規表現を使って文字列のトリミングが可能か? Python と Lua で試してみる。
もちろん
"^ *(.*) *$"は巧く行かない。最長マッチングの規則のために
" alice bob "に適用すると
"(.*)"
は "alice bib "
にマッチする。そこで正規表現を"^ *(.*[^ ]) *$"にすると
"(.*[^ ])"
は正しく"alice bob"にマッチする。しかし空白だけの文字列の場合に長さ 0 の文字列にマッチさせたい場合にはどうするか?
この場合には
"^ *(.*[^ ]|) *$"にすれば巧く行く。
以上の話の確認
import re a="^ *(.*[^ ]|) *$" c=re.compile(a) s=" alice bob " m=c.match(s) print m.regs s=" " m=c.match(s) print m.regsこの出力は
[(0, 14), (2, 12)] [(0, 6), (6, 6)]となる。
*
」、「+
」、「?
」に続く「?
」で最短マッチングを表す。これを使うと"^ *(.*?) *$"でトリミングができる。
Lua では
match(s,"^%s*(.-)%s*$")となる。ここの 「
-
」 は最短マッチングを表す。Lua の方がシンプルで僕の好みである。%s
」は空白文字を表す。