python - 正则表达式捕获所有导入语句

标签 python regex python-3.x negative-lookbehind

我想创建一个脚本来查看 Python 文件并找到所有 import声明。这些可能的变化如下:

import os
import numpy as np
from itertools import accumulate
from collections import Counter as C
from pandas import *
<小时/>

通过查看这些内容,人们可能会认为逻辑应该是:

获取全部 <foo>来自from <foo>声明和那些<bar>来自import <bar>前面没有 from <foo> .

为了用正则表达式翻译上面的内容,我写道:

from (\w+)|(?<!from \w+)import (\w+)

问题似乎在于负向后查找的非固定宽度,但我似乎无法修复它。

编辑:

作为奖励,捕获多个包含内容也很好,如下所示:

import sys, glob

最佳答案

您似乎只想从行首提取匹配项,并考虑到前导空格。

您可以考虑使用

^\s*(?:from|import)\s+(\w+(?:\s*,\s*\w+)*)

请参阅regex demo .

详细信息

  • ^ - 字符串的开头(使用 re.M 也可以匹配行的开头)
  • \s* - 0+ 空格(使用 [^\S\r\n]* 仅匹配水平空格)
  • (?:from|import) - 两个单词之一
  • \s+ - 1 个以上空格
  • (\w+(?:\s*,\s*\w+)*) - 1 个或多个单词字符,后跟 0+ 次出现的 0+ 空格,,,0+ 个空格,然后 1+ 个单词字符。

在 Python 中,您稍后可以使用 re.split(r'\s*,\s*', group_1_value) 拆分第 1 组值,以获取各个以逗号分隔的模块名称。

关于python - 正则表达式捕获所有导入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53632274/

相关文章:

json - 如何获取响应数据并将其解析为 JMeter 中的 HTTP header 管理器

c# - 特殊字符的正则表达式?

python - Python的 "append"文件写入模式只写入新字节,还是也重写整个文件?

Python pandas 将带时区的 unix 时间戳转换为日期时间

python - Django 1.9。模板继承。 block 不显示

php - 正则表达式仅剥离标签

python - 如何在 python 中从其上三角和下三角的 2 个向量创建相关矩阵?

python - 我尝试安装 "pip install mysqlclient"但每次都失败。尝试了所有其他方法,但也没有成功。我应该怎么办?

python - 如何调用字典作为存储过程的参数

python - 如何在没有 python 中的整个文件的情况下有效地检测 XML 模式