python - 使用正则表达式搜索文件并返回函数名列表

标签 python regex

所以我有包含函数的代码文件,我需要设计一个函数,该函数将通过每一行代码进行教学,并返回一个列表,该列表仅捕获文件中函数的函数名称。例如,第一个文件如下所示:

def this_is_a_function():
    return 20

def fun():
    return 'this is fun!'

使用我的函数,我应该有一个列表,如果打印应该返回这个:

this_is_a_function
fun

这是我一直在使用的代码:

import re

def get_func_names(filename):
    """doc"""
    infile = open(filename)
    data = infile.readlines()    
    result = []
    for line in data:
        matching = re.search(r'\s*def (\w+)', line)
        if matching != None:
            result += matching.group(1)
    return result

它确实正确地捕获了所有字母,但它们都是单独打印的,而不是像这样作为一个完整的函数名称(这是结果的打印和排序版本):

_
_
_
a
c
f
f
h
i
i
i
n
n
n
o
s
s
t
t
u
u

有什么我可以改变我的正则表达式,它会暂时捕获名称而不是每个字母和/或下划线....

最佳答案

a += b 当应用于可迭代的东西时,就像 a.extend(b) 一样,它将 b 的每个元素添加到 一个

由于字符串是可迭代的,当使用 += 时,Python 获取字符串的每个元素并将其添加到列表中。相反,使用 result.append(matching.group(1))

关于python - 使用正则表达式搜索文件并返回函数名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41051165/

相关文章:

java - 在java中使用正则表达式无法从简历中获取电子邮件ID

regex - 从两个文件中的列中获取值

python - 如何在 while 循环中处理意外的 json 响应

python - 启动时出现 Django runserver 错误

python - Django - 保存图像的多个版本

python - 通过模拟 IP 套接字、串行端口和共享库来测试应用程序的有效测试策略是什么?

python - tastypie 和 django 测试用例

Java 正则表达式 - 条件分组

regex - Haskell:我应该费心编译正则表达式吗?

java - 捕获组仅返回每个组的最后一次出现