如果我做findall(r'regex(with)capturing.goes.here')
,如何訪問捕獲的組? 我知道我可以通過finditer
來完成,但我不想迭代。用findall捕獲組?
42
A
回答
39
findall
剛剛返回拍攝組:
>>> re.findall('abc(de)fg(123)', 'abcdefg123 and again abcdefg123')
[('de', '123'), ('de', '123')]
相關文檔摘錄:
返回字符串中 模式的所有非重疊匹配項,作爲 字符串的列表。掃描字符串 從左到右依次爲 ,找到的順序返回。如果 模式中有一個或多個組存在,則返回組列表;如果 模式具有多個組,則此 將成爲元組列表。空 匹配包含在結果 中,除非它們觸及另一個匹配的起始 。
15
自由使用組。本場比賽將返回爲組元組的列表:
>>> re.findall('(1(23))45', '12345')
[('123', '23')]
如果你想在全場比賽被收錄,只是封裝一組在整個正則表達式:
>>> re.findall('(1(23)45)', '12345')
[('12345', '23')]
1
幾種方法是可行的:
>>> import re
>>> r = re.compile(r"'(\d+)'")
>>> result = r.findall("'1', '2', '345'")
>>> result
['1', '2', '345']
>>> result[0]
'1'
>>> for item in result:
... print(item)
...
1
2
345
>>>
0
import re
string = 'Perotto, Pier Giorgio'
names = re.findall(r'''
(?P<first>[-\w ]+),\s #first name
(?P<last> [-\w ]+) #last name
''',string, re.X|re.M)
print(names)
回報
[('Perotto', 'Pier Giorgio')]
re.M
纔有意義,如果你的字符串是多。還需要在正則VERBOSE
(等於re.X
)模式,我已經寫了,因爲它是用'''
相關問題
- 1. 捕獲組VS未捕獲組
- 2. 非捕獲組內的捕獲組
- 3. php捕獲組
- 4. 捕獲組
- 5. 捕獲組
- 6. 用grep命名捕獲組
- 7. 捕獲中包含非捕獲組?
- 8. 第二個捕獲組未捕獲
- 9. BeautifulSoup,findAll findAll後?
- 10. 捕獲組多次
- 11. 可選捕獲組
- 12. 重複捕獲組
- 13. 靜態捕獲組?
- 14. 捕獲匹配組
- 15. 獲取捕捉組
- 16. R中的正則表達式組捕獲多個捕獲組
- 17. PHP不與捕獲組尊重非捕獲組前瞻裏
- 18. 正則表達式忽略捕獲組內的捕獲組
- 19. 使用關聯和外鍵組合findAll
- 20. 使用findAll方法Groovy過濾數組
- 21. 使用捕獲組在應用re.sub
- 22. preg_match捕捉週期\。在非捕獲組
- 23. 正則表達式捕獲:獲得捕獲組全場比賽
- 24. 並行sed與組捕獲
- 25. Perl命名捕獲組
- 26. 純擊替換捕獲組
- 27. 捕獲組+數字爲PHP
- 28. 捕獲兩個可選組
- 29. grep捕獲一個詞組
- 30. 捕獲組的一部分
我覺得他問內的正則表達式組爲「(1組)。(第2組)」 – bluepnume 2011-05-16 13:55:35
@bluepnume:也許吧,但他的問題並不清楚。他的例子只有一個捕獲組。 – 2011-05-16 13:57:39