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

时间:2018-12-05 12:24:29

标签: 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+) < / p>

要在正则表达式中翻译以上内容,我写道:

import sys, glob

问题似乎出在后面的负向固定宽度不固定,但我似乎无法修复。

编辑:

作为奖励,捕获多个包含项也很不错,例如:

JMS Queue

1 个答案:

答案 0 :(得分:2)

似乎您只想从行的开头提取匹配项,并考虑到前导空白。

您可以考虑使用

IndexedSeq

请参见regex demo

详细信息

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

在Python中,您可以稍后使用,拆分Group 1值,以获取各个逗号分隔的模块名称。