正则函数的参数

时间:2017-08-16 14:11:15

标签: python regex

我对正则表达式相当缺乏经验,但我需要一个匹配函数的参数。此函数将在字符串中多次出现,我想返回所有参数的列表。

正则表达式必须匹配:

  1. 字母数字和下划线
  2. 直接在括号内的引号
  3. 特定功能名称后
  4. 这是一个示例字符串:

    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方面实际返回匹配。

1 个答案:

答案 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']