pat1 = '[ab]' と pat2 = 'a|b' は正規表現パターンとして Python(python2.7, windows) 're' モジュールで同じ機能を持っていると思います。しかし、私は '[ab]+' と '(a|b)+' と混同しています。同じ機能を持っていますか? そうでない場合は、詳細を説明していただけますか?
'''
Created on 2012-9-4
@author: melo
'''
import re
pat1 = '(a|b)+'
pat2 = '[ab]+'
text = '22ababbbaa33aaa44b55bb66abaa77babab88'
m1 = re.search(pat1, text)
m2 = re.search(pat2, text)
print 'search with pat1:', m1.group()
print 'search with pat2:', m2.group()
m11 = re.split(pat1, text)
m22 = re.split(pat2, text)
print 'split with pat1:', m11
print 'split with pat2:', m22
m111 = re.findall(pat1, text)
m222 = re.findall(pat2, text)
print 'findall with pat1:', m111
print 'findall with pat2:', m222
以下のように出力します。
search with pat1: ababbbaa
search with pat2: ababbbaa
split with pat1: ['22', 'a', '33', 'a', '44', 'b', '55', 'b', '66', 'a', '77', 'b', '88']
split with pat2: ['22', '33', '44', '55', '66', '77', '88']
findall with pat1: ['a', 'a', 'b', 'b', 'a', 'b']
findall with pat2: ['ababbbaa', 'aaa', 'b', 'bb', 'abaa', 'babab']
「pat1」と「pat2」が異なるのはなぜですか?また、その違いは何ですか? 「pat1」が実際に一致する文字列の種類は何ですか?