使用Python正则表达式查找文件中的函数调用的正则表达式?
我想要一个正则表达式,打算用在Python的re模块里,这个表达式可以在Python文件中查找函数调用。不过,我对要查找的函数调用有一些特别的要求。
- 这些函数调用必须有一个特定的名字。
- 函数调用可以是连着的,但只能有一个连着的调用,并且这个调用的名字也必须是一样的。
- 第一个函数调用总是需要一个字符串作为参数。
- 而连着的那个函数调用可以接受任意数量的参数(这让我有点担心)。
下面是我想在文件中查找的函数使用示例:
# 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"})
还有一个常见的声明:我搜索过这个问题,发现有些问题和我的差不多,但我在想我的需求是否足够具体,以避免“规则与不规则”语言的问题。真是因为我不是计算机专业的,对正则表达式有点害怕。
3 个回答
0
我觉得这个更适合(更准确地说是在一个函数里面还有另一个函数的情况):
\w+\([^\)]*\){1,}(\.[^\)]*\))?
1
顺便提一下,这里有一段来自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标准库中自带的一些工具:
8
这段代码应该能满足你的需求:
[a-zA-Z]+\([^\)]*\)(\.[^\)]*\))?