我有一个命令的一些输出,看起来像这样。
make: Toyota
model: Camry
year: 2020我想把它转换成一个像这样的字典:{'make': 'Toyota', 'model': 'Camry', 'year': '2020'}
我可以使用像make:\s*(?P<make>\w+{3-10})这样的逻辑一次转换一行,对于model和year也是类似的,但是我如何才能得到一个正则表达式,我需要用这个正则表达式做什么来提取我需要的信息?
发布于 2020-11-19 15:59:57
使用yaml的一种方式
import yaml
new_str = """make: Toyota
model: Camry
year: 2020"""
yaml.safe_load(new_str)输出:
{'make': 'Toyota', 'model': 'Camry', 'year': 2020}发布于 2020-11-19 14:42:04
您可以将finditer与一个简单的正则表达式一起使用,该正则表达式在两个单独的组中捕获键和值,如下所示:
>>> import re
>>> d = {}
>>> for m in re.finditer(r"(\w+):\s*(\S+)", s): d[m.group(1)] = m.group(2)
>>> ...
>>> print (d)
{'make': 'Toyota', 'model': 'Camry', 'year': '2020'}RegEx详细信息:
(\w+):匹配捕获组#1:\s*:中的单词字符,后面跟着0个或多个whitespaces(\S+):匹配捕获组#2中的非空格字符
发布于 2020-11-19 15:43:17
以下是使用单个regsub +字符串构造的非迭代方法:
In [1]: foo = """
...: make: Toyota
...: model: Camry
...: year: 2020
...: """
In [2]: import re
In [3]: import json
In [4]: json.loads("{" + re.sub(r'(\w+)\s*:\s*(\w+)(\n)', r'"\1": "\2", ', foo, re.MULTILINE).rstrip(", ").lstrip("\n") + "}")
Out[4]: {u'make': u'Toyota', u'model': u'Camry', u'year': u'2020'}
In [5]: bar = json.loads("{" + re.sub(r'(\w+)\s*:\s*(\w+)(\n)', r'"\1": "\2", ', foo, re.MULTILINE).rstrip(", ").lstrip("\n") + "}")
In [6]: print(bar)
{u'make': u'Toyota', u'model': u'Camry', u'year': u'2020'}
In [7]: type(bar)
Out[7]: dict
In [8]:https://stackoverflow.com/questions/64906431
复制相似问题