关于解析方法签名的正则表达式问题

2 投票
1 回答
1292 浏览
提问于 2025-04-16 08:48

我正在尝试解析一种特定格式的方法签名:

'function_name(foo=<str>, bar=<array>)'

从这个签名中,我想提取出方法的名称,以及每个参数和它的类型。显然,我不想要那些 <> 这样的字符等等。参数的数量是可变的。

我的问题是:使用这个正则表达式,怎么才能获取到所有的参数呢?我在用Python,但我只是想要一个大概的思路。我需要命名组吗?如果需要的话,我该怎么用它们来捕获多个参数,每个参数都有它的类型,并且都在一个正则表达式中?

1 个回答

2

在Python的正则表达式中,你不能匹配不确定数量的分组(详细信息可以查看这个链接)。相反,你可以结合使用正则表达式和split()方法。

>>> name, args = re.match(r'(\w+)\((.*)\)', 'function_name(foo=<str>, bar=<array>, baz=<int>)').groups()
>>> args = [re.match(r'(\w+)=<(\w+)>', arg).groups() for arg in args.split(', ')]
>>> name, args
('function_name', [('foo', 'str'), ('bar', 'array'), ('baz', 'int')])

这样做可以匹配不确定数量(包括0个)的参数。我选择不允许额外的空格,不过如果你的格式不太严格,可以在标识符之间加上\s+来允许空格。

撰写回答