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

时间:2016-12-09 00:23:28

标签: 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

关于我的正则表达式,我是否可以更改某些内容,而不是每个字母和/或下划线......

1 个答案:

答案 0 :(得分:1)

a += b在应用于可迭代的内容时就像a.extend(b)一样,会将b的每个元素添加到a

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