Wil*_*nis 2 python regex dictionary python-2.7
我有以下格式的字符串:
author="PersonsName" date="1183050420" format="1.1" version="1.2"
Run Code Online (Sandbox Code Playgroud)
我想把它变成Python字典,例如:
{'author': 'PersonsName', 'date': '1183050420', 'format': '1.1', 'version': '1.2'}
Run Code Online (Sandbox Code Playgroud)
我已经尝试在字符串上使用re.split来做到这一点:
attribs = (re.split('(=?" ?)', twikiattribs))
Run Code Online (Sandbox Code Playgroud)
以为我会得到像这样的清单:
['author', 'PersonsName', 'date', '1183050420', 'format', '1.1', 'version', '1.2']
Run Code Online (Sandbox Code Playgroud)
那我可以变成一个字典,但是我却得到了:
['author', '="', 'PersonsName', '" ', 'date', '="', '1183050420', '" ', 'format', '="', '1.1', '" ', 'version', '="', '1.2', '"', '']
Run Code Online (Sandbox Code Playgroud)
因此,在我进一步遵循re.split行之前,通常是否有更好的方法来实现我要执行的操作,并且/或者如果解决方案涉及re.split,我如何编写将在任何对象上拆分的正则表达式琴弦=","_(其中“_”是一个空格字符),或者仅仅"只是产生具有在奇数索引键,并在偶数值的列表?
用途re.findall():
dict(re.findall(r'(\w+)="([^"]+)"', twikiattribs))
Run Code Online (Sandbox Code Playgroud)
re.findall(),当呈现具有多个捕获组的模式时,将返回一个元组列表,每个嵌套的元组都包含捕获的组。dict()愉快地获取该输出,并将每个嵌套元组解释为一个键值对。
演示:
>>> import re
>>> twikiattribs = 'author="PersonsName" date="1183050420" format="1.1" version="1.2"'
>>> re.findall(r'(\w+)="([^"]+)"', twikiattribs)
[('author', 'PersonsName'), ('date', '1183050420'), ('format', '1.1'), ('version', '1.2')]
>>> dict(re.findall(r'(\w+)="([^"]+)"', twikiattribs))
{'date': '1183050420', 'format': '1.1', 'version': '1.2', 'author': 'PersonsName'}
Run Code Online (Sandbox Code Playgroud)
re.split()基于捕获组的行为也有所不同;如果分组,则拆分后的文本将包含在输出中。比较带有和不带有捕获组的输出:
>>> re.split('(=?" ?)', twikiattribs)
['author', '="', 'PersonsName', '" ', 'date', '="', '1183050420', '" ', 'format', '="', '1.1', '" ', 'version', '="', '1.2', '"', '']
>>> re.split('=?" ?', twikiattribs)
['author', 'PersonsName', 'date', '1183050420', 'format', '1.1', 'version', '1.2', '']
Run Code Online (Sandbox Code Playgroud)
但是,将re.findall()输出转换为字典要容易得多。