2009年6月13日土曜日

re.findall の挙動

import re

これはマジックでっせー(-_-;)

正規表現ってマジ便利ですね~
こいつで幸せになってる方も多いんじゃないでしょうか.

Pythonにももち正規表現を扱うモジュール(ライブラリ)が
準備されているわけですが…

そいつが re です!

ただ,そのなかの findall ってヤツがあとですが…


こいつが期待した動作をしないんですよ~(+_+)



まず,そもそも findall ってのは与えられた正規表現にマッチ
する部分を全てリストにして返してくれる関数です.

例えば
re.findall('guy', 'Hey guys!')
['guy']

となるわけでっせ.


なのにー,どうしてー
こうなっちゃうの!?!?!?

re.findall('(ab)+c', 'abcababcabc')
['ab', 'ab', 'ab']


abcにマッチしねーぞ?

正規表現が間違ってるってことはなさそうですが…
次のコードは期待どおりですから.
re.search('(ab)+c', 'abcababcabc').group()
'abc'


どうやらまだ理解不足なようです.
ぐむぅ..

1 件のコメント:

  1. findall は括弧を自動的に抽出するようなので
    '((ab)+c)'
    でマッチさせてはいかがでしょうか?

    返信削除