所有参数假设我有一个字符串,如下列:正则表达式匹配函数名和Python中
"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”仅与最后一个参数相匹配。 (1)希望弄清楚为什么Python每次只匹配最后一个参数,(2)我是否可以在Python中进行Scheme风格的模式匹配。或者,如果在Python中有与Scheme-style模式匹配一样直观的东西。我查看了ast模块,其语法非常复杂。
这个函数调用某种特定的语言吗?你不应该使用正则表达式来解析已经存在正确/完整解析器的语言...... – Borealid 2012-04-15 17:04:49
你不能用正则表达式来做到这一点(假设你想匹配单个参数,它们本身可能是函数调用)。你需要一个实际的解析器。如果你坚持写你自己的,然后阅读:http://effbot.org/zone/simple-iterator-parser.htm – Wes 2012-04-15 17:12:13
你可能想签出[pyparsing](http://pyparsing.wikispaces.com/ )如果你打算做更复杂的事情。 – 2012-04-15 17:20:27