我对正则表达式相当缺乏经验,但我需要一个匹配函数的参数。此函数将在字符串中多次出现,我想返回所有参数的列表。
正则表达式必须匹配:
这是一个示例字符串:
Generic3(p, [Generic3(g, [Atom('_xyx'), Atom('y'), Atom('z_')]), Atom('x_1'), Generic2(f, [Atom('x'), Atom('y')])])
我希望这是输出:
['_xyx', 'y', 'z_', x_1', 'x', 'y']
到目前为止我所拥有的:
(?<=Atom\(')[\w|_]*
我打电话给:
导入重新
s = "Generic3(p, [Generic3(g, [Atom('x'), Atom('y'), Atom('z')]), Atom('x'), Generic2(f, [Atom('x'), Atom('y')])])"
print(re.match(r"(?<=Atom\(')[\w|_]*", s))
但这只是打印None
。我觉得我几乎就在那里,但是我错过了一些东西,也许是在Python方面实际返回匹配。
答案 0 :(得分:1)
您的正则表达式已关闭,您需要添加\W
字符才能找到下划线:
s = "Generic3(p, [Generic3(g, [Atom('_xyx'), Atom('y'), Atom('z_')]), Atom('x_1'), Generic2(f, [Atom('x'), Atom('y')])])"
r = "(?<=Atom\()\W\w+"
final_data = re.findall(r, s)
你也可以试试这个:
import re
s = "Generic3(p, [Generic3(g, [Atom('_xyx'), Atom('y'), Atom('z_')]), Atom('x_1'), Generic2(f, [Atom('x'), Atom('y')])])"
new_data = re.findall("Atom\('(.*?)'\)", s)
输出:
['_xyx', 'y', 'z_', 'x_1', 'x', 'y']