2 回答

TA貢獻1840條經驗 獲得超5個贊
你有幾種方法可以做到這一點。首先,由于您說過您的鍵值對嵌入在較大的電子郵件中,因此您需要提取它們。您可以使用此正則表達式執行此操作,它檢查以單詞和等號開頭的行:
import re
text = " ... Full email text ... "
dataPoints = re.search(r"^\w*=.*$", text, re.MULTILINE).group(0)
然后你需要創建你的字典。
選項 1:最簡單
使用以下正則表達式查找:
result = dict(re.findall(r'(\w*)=(\".*?\"|\S*)', dataPoints))
選項 2:典型拆分
遵循此問題的典型方法:將各種鍵值組合拆分為一個列表,然后將每個組合拆分為單獨的鍵和值。但是,由于您的鍵值對是用空格分隔的,而不是分號、& 符號或類似的東西,并且您的某些值中有空格,所以我們不能簡單地按空格分隔。這意味著我們需要使用正則表達式前瞻才能正常工作:
regexSplit = dict([i.split("=") for i in re.split(r"\s(?=\w+=)", dataPoints)])
選項 3:沒有正則表達式
如果你出于任何原因想完全避免使用正則表達式,你可以使用以下內容,它按等號拆分,然后將鍵和值重新組合成正確的排列以創建字典:
allSplits = dataPoints.split("=")
splitList = [allSplits[0]] + [i for a in allSplits[1:-1]
for i in a.rsplit(" ", 1)] + [allSplits[-1]]
splitDict = dict(zip(splitList[::2], splitList[1::2]))
上面的代碼假定您的字典最終將至少包含 2 個項目。

TA貢獻1765條經驗 獲得超5個贊
將 OR ( |
) 添加到您的正則表達式怎么樣,例如
(\w*)=(\"[\w\s\+()\.]*\"|[\w\-\:\.]*)
匹配你給的字符串。
筆記
\"[\w\s\+()\.]*\"
匹配包含在""
[\w\-\:\.]*
匹配那些沒有
添加回答
舉報