如何创建正则表达式以匹配函数定义

时间:2011-09-19 18:29:39

标签: python regex

我需要找到像

这样的函数定义
  

function(param1,param2,param3)

我在python中使用以下正则表达式

\S+\\((\S+|\s+|,)\\)

所以像

这样的东西
re.findall("\S+\\((\S+|\s+|,)\\)",source_code_string)

应该给我所有的函数名称,但它不起作用。请建议对上述正则表达式进行改进。我是正则表达式的新手。

3 个答案:

答案 0 :(得分:2)

你的正则表达式是根本错误的

\S+\\((\S+|\s+|,)\\)

表示至少匹配一个非空格,一个括号,一系列非空格或一系列空格或逗号,然后是右括号。

我认为你的意思是这个(使用原始字符串(r'')并只转义一次)

(\S+)\s*\(\s*\S+\s*(?:,\s*\S+)*\)

here on Regexr

然后,您可以在捕获组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 docsanother source