Python正则表达式提取两个字符串之间的内容。

3
假设我有一个字符串:
st = "'aaa': '1', 'bbb': '2.3', 'ccc': 'name'"

我希望从st中提取以下内容。
['1', '2.3', 'name']

我该如何做到这一点?

谢谢。

2个回答

5

您可以首先使用ast.literal_eval创建一个 dict 然后获取其中的values

import ast

st = "'aaa': '1', 'bbb': '2.3', 'ccc': 'name'"

print (ast.literal_eval('{' + st + '}'))
{'aaa': '1', 'bbb': '2.3', 'ccc': 'name'}

#python 3 add list
print (list(ast.literal_eval('{' + st + '}').values()))
['1', '2.3', 'name']

#python 2
print ast.literal_eval('{' + st + '}').values()
['1', '2.3', 'name']

谢谢。但是有没有另一种使用正则表达式的方法来做这件事? - Mansumen
检查另一个解决方案。 - jezrael

4

使用 ast 模块来完成会更好,就像 jezrael 所做的那样。这里还有另一种使用正则表达式的解决方案:

import re

st = "'a': '1', 'b': '2.3', 'c': 'name', 'd': 229, 'e': '', 'f': '228', 'g': 12"
print re.findall(r'\'\S+?\':\s*\'?(.*?)\'?(?:,|$)', st)

输出:

['1', '2.3', 'name', '229', '', '228', '12']

在regex101上的演示:

https://regex101.com/r/zGAt4D/5


如果在“:”后面是数字而不是字符串,会发生什么? - Mansumen
@Mansumen 好的,我会改进它。 - Mohammad Yusuf
@Mansumen 现在检查。 - Mohammad Yusuf
@Mansumen让它更加健壮,包括空字符串。 - Mohammad Yusuf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接