【发布时间】:2011-12-13 05:23:05
【问题描述】:
我想要一个正则表达式,我将在 Python re 模块中使用它,它将在 Python 文件中查找 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"})
以及通常的免责声明:我对此进行了搜索,问题与我的问题很接近,但我想知道我的需求是否受到足够的限制以解决“常规与不规则”语言问题。这就是我不是计算机科学专业并且害怕正则表达式的结果。
【问题讨论】:
-
你确定正则表达式是最好的工具吗? Python 有几个用于代码自省的内置库。见docs.python.org/library/language.html
-
@DaveP 我不是。我习惯性地想到正则表达式,因为它有点像转向 PERL 的 SE。我学到了很多自学编程(从 C 开始),但有一些经典的东西我只是错过了没有获得 CS 学位,比如学习语法。我真的很喜欢雷蒙德在下面的回答,所以我要先尝试一下,因为我觉得它更可靠,更不容易出错,而且我会学到很多东西。我还将测试 Sylverdrag 的答案,因为我认为他可能是一个非常好的短期解决方案(只要我汇总的测试通过)。