假设我有一个字符串,如下所示:
"func(arg1, arg2, arg3, arg4, ..., argn)"
编辑:此功能不是某种特定语言。它只有这种格式。如果它更容易,不要将其视为函数调用,只是一个字符串。
我想编写一个正则表达式来匹配函数和每个参数。我正在用 Python 写这个。所需的输出是:
{"function" : "func", "arg" : ["arg1", "arg2", ... , "argn"]}
编辑:虽然参数可以是函数调用,但一旦我创建了一个有效的正则表达式,我就可以轻松地递归地尝试将它们与相同的正则表达式匹配。我的意思是我可以用每个参数递归函数。但这并不重要。我不是想创建一个解释器,只是为了识别这些论点。
这是我的尝试:
import re
s = "func(arg1, arg2, arg3, arg4, argn)"
m = re.match(r"(?P<function>\w+)\s?\((?P<args>(?P<arg>\w+(,\s?)?)+)\)", s)
print m.groupdict()
这是输出:
{'function': 'func', 'args': 'arg1, arg2, arg3, arg4, argn', 'arg': 'argn'}
该函数匹配得很好,参数集也是如此。但是,我似乎无法匹配各个论点。这是我的正则表达式的问题,还是 Python 正则表达式匹配的限制?
EDIT2:我知道我现在可以使用以下代码拆分参数:
d["arg"] = d["args"].split(", ")
但我想知道我是否可以用正则表达式完成整个工作。特别是,我想知道为什么“arg”只匹配最后一个参数。
EDIT3:我想我(1)希望弄清楚为什么 Python 每次只匹配最后一个参数,以及(2)我是否可以在 Python 中进行 Scheme 样式的模式匹配。或者,如果 Python 中有一些与 Scheme 样式的模式匹配一样直观的东西。我查看了 ast 模块,它的语法非常复杂。