首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多行regex python,转换为dict

多行regex python,转换为dict
EN

Stack Overflow用户
提问于 2020-11-19 14:27:02
回答 3查看 55关注 0票数 0

我有一个命令的一些输出,看起来像这样。

代码语言:javascript
复制
make:   Toyota
model:  Camry
year:   2020

我想把它转换成一个像这样的字典:{'make': 'Toyota', 'model': 'Camry', 'year': '2020'}

我可以使用像make:\s*(?P<make>\w+{3-10})这样的逻辑一次转换一行,对于modelyear也是类似的,但是我如何才能得到一个正则表达式,我需要用这个正则表达式做什么来提取我需要的信息?

EN

回答 3

Stack Overflow用户

发布于 2020-11-19 15:59:57

使用yaml的一种方式

代码语言:javascript
复制
import yaml

new_str = """make:   Toyota
model:  Camry
year:   2020"""

yaml.safe_load(new_str)

输出:

代码语言:javascript
复制
{'make': 'Toyota', 'model': 'Camry', 'year': 2020}
票数 1
EN

Stack Overflow用户

发布于 2020-11-19 14:42:04

您可以将finditer与一个简单的正则表达式一起使用,该正则表达式在两个单独的组中捕获键和值,如下所示:

代码语言:javascript
复制
>>> 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

中的非空格字符

票数 0
EN

Stack Overflow用户

发布于 2020-11-19 15:43:17

以下是使用单个regsub +字符串构造的非迭代方法:

代码语言:javascript
复制
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]:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64906431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档