以下是python中的一些简单函数调用:
foo(arg1, arg2, arg3) func1()
假设它是一个有效的函数调用。
假设我在解析文件时读取了这些行。
将函数名和args分成带有两个元素的列表的最简洁方法是什么,第一个是函数名的字符串,第二个是参数的字符串?
期望的结果:
["foo", "arg, arg2, arg3"] ["func1", ""]
我目前正在使用字符串搜索从右侧找到“(”左边的第一个实例和“)”的第一个实例,只是用那些给定的索引拼接字符串,但我不是就像我正在接近这个问题一样。
答案 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)"))
时可能做错了,等等。