Python:拆分函数和参数

时间:2012-03-10 08:35:48

标签: python string-parsing

以下是python中的一些简单函数调用:

foo(arg1, arg2, arg3)
func1()

假设它是一个有效的函数调用。

假设我在解析文件时读取了这些行。

将函数名和args分成带有两个元素的列表的最简洁方法是什么,第一个是函数名的字符串,第二个是参数的字符串?

期望的结果:

["foo", "arg, arg2, arg3"]
["func1", ""]

我目前正在使用字符串搜索从右侧找到“(”左边的第一个实例和“)”的第一个实例,只是用那些给定的索引拼接字符串,但我不是就像我正在接近这个问题一样。

2 个答案:

答案 0 :(得分:3)

我目前正在使用正则表达式做类似的事情。将我的代码改编为您的案例,以下内容适用于您提供的示例。

import re

def explode(s):
    pattern = r'(\w[\w\d_]*)\((.*)\)$'
    match = re.match(pattern, s)
    if match:
        return list(match.groups())
    else:
        return []

答案 1 :(得分:2)

如果您正在使用Python解析Python文件,请考虑使用Python的解析器:ast(特别是ast.parse()调用)。

那就是说,你当前的方法并不可怕(尽管它会在垃圾邮件多行的函数调用中断)。除了前面提到的完整解析器之外,几乎没有完全正确的方法 - 例如,你可以计算匹配的parens,这样即使中间有一个换行符,a((b,c))也会返回正确的值 - 但是那个代码会面对a((b, "c)"))时可能做错了,等等。