代码之家  ›  专栏  ›  技术社区  ›  Ma0

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

  •  1
  • Ma0  · 技术社区  · 6 年前

    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> 从<foo> .

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

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

    这个问题似乎与非固定宽度的负向后看,但我似乎无法修复它。

    编辑:

    作为奖励,还可以捕获多个包含项,如:

    import sys, glob
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Wiktor Stribiżew    6 年前

    你可以考虑使用

    ^\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)