我想创建一个在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
答案 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值,以获取各个逗号分隔的模块名称。