import re
>>>s = 'abc -j k -l m'
>>>m = re.search('-\w+ \w+', s)
>>>m.groups()
()
>>> m.group(0)
'-j k'
爲什麼groups()
給我什麼,但group(0)
產生了一些?有什麼不同?
跟進
代碼如下
>>>re.findall('(-\w+ \w+)', s)
['-j k', '-l m', '-n o']
findall
可以得到我所有的-\w+ \w+
子,但看看這個:
>>>m = re.search('(-\w+ \w+)+', s)
>>>m.groups()
('-j k',)
爲什麼不能search
給予我所有的子字符串?
跟進再次
如果s = 'abc -j k -l m -k o
,並
>>>m = re.search(r'(-\w+ \w+)+', s)
>>>m.groups()
('-l m ',) # why just one substring?
>>>m.group(0)
'-j k -l m ' # as I expected
大多數正則表達式風格中的標準行爲是,當多次捕獲組中的任何內容時,替換*中的任何內容,而不是爲每次傳遞生成額外的組。如果你想捕獲所有這些,你必須反覆搜索。 're.findall()'應該對你有用。 – danielkza 2012-02-20 09:05:15
@danielkza,但是爲什麼'groups()'給了我''-l m''而不是''-j k''? – Alcott 2012-02-20 10:39:26
重複的第一遍匹配'-j k'。第二遍然後用新的'-l m'覆蓋存儲的比賽。如果接下來有更多的匹配,最後一個會被存儲。我無法告訴你爲什麼這種行爲存在,但它幾乎存在於所有正則表達式中。如果你想捕捉所有的比賽,你必須多次應用模式。 – danielkza 2012-02-20 11:54:48