簡體   English   中英

在Python中使用findall多個模式的正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM