python正則表達式中的括號匹配問題

字號:


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