从Python中的格式化字符串中获取特定值

时间:2015-03-24 03:53:53

标签: python

我正在调用CLI实用程序(使用subprocess.popen),我需要从输出中解析出一个值。输出看起来像这样:

Data for user id: jsmith

User id . . . . . . . . . . . : jsmith
User key  . . . . . . . . . . : jsmith
Full name . . . . . . . . . . : Joe Smith
Email . . . . . . . . . . . . : joe.smith@delphix.com
Time zone . . . . . . . . . . : America/Los_Angeles

解析此问题的最佳方法是什么,以便获取用户密钥,全名和电子邮件的价值?谢谢!

2 个答案:

答案 0 :(得分:1)

使用re.findall功能。

>>> s = '''Data for user id: jsmith

User id . . . . . . . . . . . : jsmith
User key  . . . . . . . . . . : jsmith
Full name . . . . . . . . . . : Joe Smith
Email . . . . . . . . . . . . : joe.smith@delphix.com
Time zone . . . . . . . . . . : America/Los_Angeles'''
>>> re.findall(r'\b(User\s+key|Full\s+name|Email)\b.*:\s*(.*)', s)
[('User key', 'jsmith'), ('Full name', 'Joe Smith'), ('Email', 'joe.smith@delphix.com')]

您可以使用dict函数将findall的输出转换为字典。

>>> dict(re.findall(r'\b(User\s+key|Full\s+name|Email)\b.*:\s*(.*)', s))
{'Email': 'joe.smith@delphix.com', 'Full name': 'Joe Smith', 'User key': 'jsmith'}

如果要进行不区分大小写的匹配,请添加re.IGNORECASE参数。

答案 1 :(得分:1)

您可以遍历非空白行并获取如下值:

x.split(":")[1][1:]

其中x是该行上的字符串,假设值

中没有冒号