我需要找到像
这样的函数定义function(param1,param2,param3)
我在python中使用以下正则表达式
\S+\\((\S+|\s+|,)\\)
所以像
这样的东西re.findall("\S+\\((\S+|\s+|,)\\)",source_code_string)
应该给我所有的函数名称,但它不起作用。请建议对上述正则表达式进行改进。我是正则表达式的新手。
答案 0 :(得分:2)
你的正则表达式是根本错误的
\S+\\((\S+|\s+|,)\\)
表示至少匹配一个非空格,一个括号,一系列非空格或一系列空格或逗号,然后是右括号。
我认为你的意思是这个(使用原始字符串(r'')并只转义一次)
(\S+)\s*\(\s*\S+\s*(?:,\s*\S+)*\)
然后,您可以在捕获组1中找到您的函数名称(因为第一个\S+
周围的括号)
\s*
是可选的空格
但是这个正则表达式是如此简单,我相信它不会找到所有函数(它会在嵌套括号上失败)并且它会找到其他东西。
答案 1 :(得分:2)
答案取决于源文件的编写语言。回想一下,在Python中,函数定义以def
为前缀,后缀为:
。扩展Stema的答案,试试Python:
^\s*def (\S+)\s*\(\s*\S+\s*(?:,\s*\S+)*\):$
这应该只匹配Python函数定义。 ^
和$
分别仅在行的开头和结尾匹配,因此这只会在自己的行上找到函数defs,因为它们通常用于Python。
答案 2 :(得分:1)
目前还不清楚你在寻找什么,但要考虑一些事情。
\w+
将匹配任何单词,其中包含字母,数字,下划线和大多数其他类似unicode字符的字符
首选处理python正则表达式时使用原始字符串是首选,因为您不必转义反斜杠。这意味着您需要为每个正则表达式模式添加前缀,例如r'this'
。否则,要匹配文字反斜杠,您需要使用\\\\
如有疑问,请检查正则表达式上的library docs或another source。