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\-\:\.]*
匹配那些没有
添加回答
举报