我正在调用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
解析此问题的最佳方法是什么,以便获取用户密钥,全名和电子邮件的价值?谢谢!
答案 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是该行上的字符串,假设值
中没有冒号