使用Python正则表达式在文件中查找函数调用的正则表达式?

时间:2011-12-13 05:23:05

标签: python regex

我想要一个正则表达式,我将使用Python re模块,它将在python文件中查找python函数调用,但是我正在寻找的函数调用周围会有一些警告。 / p>

  • 函数调用将具有单个特定名称。
  • 函数调用可能会被链接,但只会有一个链接的调用始终具有相同的名称。
  • 第一个函数将始终采用单个字符串参数。
  • 然而,链式函数可能会采用任意参数(这是我担心的那个)。

以下是我想在文件中查找的函数的示例用法:

# Simple function call.
f("_key")

# The chained function call, in the simplest format (no args).
f("_key").g()

# The chained function call with simple arguments.
f("_key").g("hello", 1337)

# The chained function call with possible, more complex arguments
f("_key").g(obj.blah(), {"dog":"cat"})

# And then the possibility for long function calls to extend over one line
f("_key").g(
            "dogs",
            "cats",
            {"living":"together"})

通常的免责声明:我对此进行了搜索,问题与我的关系很接近,但我想知道我的需求是否足以绕过“常规与非常规”语言问题。这就是我不是计算机科学专业并且害怕正则表达式的原因。

2 个答案:

答案 0 :(得分:9)

这应该做你想要的:

[a-zA-Z]+\([^\)]*\)(\.[^\)]*\))?

答案 1 :(得分:1)

FWIW,这里摘录自Grammar/Grammar

decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE

trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME

power: atom trailer* ['**' factor]
atom: ('(' [yield_expr|testlist_comp] ')' |
       '[' [listmaker] ']' |
       '{' [dictorsetmaker] '}' |
       '`' testlist1 '`' |
       NAME | NUMBER | STRING+)

arglist: (argument ',')* (argument [',']
                         |'*' test (',' argument)* [',' '**' test] 
                         |'**' test)

这些是正则表达式需要处理以捕获所有函数调用而没有任何误报的情况。

可能最好利用Python标准库附带的工具集,而不是正则表达式: