問題:
m = re.findall('[0-9]*4[0-9]*', '[4]')
可以匹配到4.
m = re.findall('([0-9])*4([0-9])*', '[4]')
匹配不到4.
這是為什么呢?PS,這個是一個簡化的說明,我要用的正則比這個復(fù)雜,所以要用到(),表示一個序列的匹配。
補(bǔ)充一點(diǎn),我放在notepad++中用的時(shí)候,兩種寫法都能匹配出來,不知道為什么python中就不行了。
答案:
python的正則中用()會進(jìn)行匹配,所以返回結(jié)果是['',''],就是兩個()中的匹配。要想達(dá)到原來的匹配效果,就是把4匹配出來,有兩種解決方法:
1.最外層加個大括號,變成:m = re.findall('(([0-9])*4([0-9])*)', '[4]'),返回結(jié)果的第一個元素就是匹配結(jié)果了。
2.去除()的匹配結(jié)果返回,在括號前面加入?:,變成m = re.findall('(?:\d)*4(?:\d)*', '[4]'),返回結(jié)果就是要匹配的結(jié)果了。
更多信息請查看IT技術(shù)專欄