[英]regex with findall multiple patterns in Python
假設我有一個字符串s =“我們是'團隊'的'冠軍',如果我們得到0x12到0x34正確的答案”
我想獲得一個列表['冠軍','團隊','0x12','0x34']
這是我嘗試過的:
k = re.findall(r'(\'\w+\')|(0x\w+)',s)
但我得到了這個
[("'Champion'", ''), ('', '0x12'), ('', '0x34')]
如何修復代碼?
這是因為(...)
是一個捕獲組 ,它使你的匹配返回一個包含與(...)
之間的子正則表達式匹配的字符串的元組。
您可以使用(?:...)
代替您的組進行非捕獲。 或者在這種情況下,您可以完全刪除括號。
re.findall(r"'[^']+'|0x\w+",s)
# ["'Champion'", "'The Team'", '0x12', '0x34']
請注意,如果您希望獲得固定數量的匹配,您實際上可以使用捕獲組來解決您的問題。
re.match(r".*?'([^']+)'.*?'([^']+)'.*?(0x\w+).*?(0x\w+)",s).groups()
# ("Champion", "The Team", '0x12', '0x34')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.