编写程序,使用正则表达式提取一个 Python 文件(模块)中的所有函数名, # 然后打印出函数名,以及函数名所在的位置(即文件中的第几行)。
时间: 2023-06-25 20:06:15 浏览: 45
可以使用Python自带的re模块来实现正则表达式的匹配,以下是一个可能的实现:
```python
import re
# 读取Python文件内容
with open('example.py') as f:
content = f.read()
# 定义正则表达式,匹配以 def 开头、后面跟着空格、之后是函数名的行
pattern = re.compile(r'^\s*def\s+([a-zA-Z_]\w*)\s*\('m)
# 使用 finditer 方法查找所有匹配的行
matches = pattern.finditer(content)
# 遍历所有匹配,打印出函数名和行号
for match in matches:
print(f"Function '{match.group(1)}' found at line {content.count('\n', 0, match.start()) + 1}")
```
上述代码中,首先读取指定的Python文件内容,然后定义正则表达式,使用 `finditer` 方法查找所有匹配的行,并逐个打印出函数名和行号。在打印行号时,使用 `count` 方法计算出当前匹配行之前有多少个换行符,再加上1即为行号。
相关问题
1. 编写程序,使用正则表达式提取另一个Python 程序中的所有函数名
可以使用re模块来实现正则表达式匹配,以下是一个提取Python程序中所有函数名的示例代码:
```python
import re
# 定义正则表达式,匹配函数名
pattern = r'def\s+([^\s\(]+)\s*\('
# 读取Python程序文件
with open('example.py', 'r') as f:
data = f.read()
# 使用正则表达式匹配所有函数名
matches = re.findall(pattern, data)
# 输出所有匹配结果
print(matches)
```
在上述示例中,我们使用正则表达式 `def\s+([^\s\(]+)\s*\(` 来匹配函数名。该正则表达式匹配以 `def` 开头、后面跟着一个或多个空格字符、紧接着是函数名(不包括空格和左括号)和一个左括号的字符串。
运行上述代码后,将输出Python程序中所有的函数名。如果要提取其他类型的代码元素,只需要修改正则表达式即可。
编写程序,使用正则表达式提取另一个Python程序中的所有变量名;
可以使用Python中的re模块来实现。下面是一个示例代码:
```python
import re
def extract_variable_names(code):
pattern = r'\b[a-zA-Z_]\w*\b'
# \b 表示单词边界
# [a-zA-Z_] 表示匹配字母和下划线
# \w* 表示匹配任意个字母、数字或下划线
# \b 表示单词边界
variable_names = re.findall(pattern, code)
return variable_names
# 示例用法
code = """
x = 1
y = 2
z = x + y
print(z)
"""
variable_names = extract_variable_names(code)
print(variable_names)
# 输出:['x', 'y', 'z', 'print']
```
该函数会将输入的Python代码中,所有的变量名提取出来,并以列表的形式返回。注意,该函数提取的变量名包括Python内置函数和关键字,如上述示例中的`print`。如果需要排除这些变量名,可以在正则表达式中添加对应的规则。