Regex для захвата всех операторов импорта
Я хочу создать скрипт, который смотрит в файл 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
1 ответ
Кажется, вы хотите извлечь только совпадения из начала строки, принимая во внимание начальные пробелы.
Вы можете рассмотреть возможность использования
^\s*(?:from|import)\s+(\w+(?:\s*,\s*\w+)*)
Смотрите демо регулярных выражений.
подробности
^
- начало строки (используйтеre.M
также соответствовать началу строки)\s*
- 0+ пробелов (используйте[^\S\r\n]*
соответствовать только горизонтальным пробелам)(?:from|import)
- любое из двух слов\s+
- 1+ пробелов(\w+(?:\s*,\s*\w+)*)
- 1 или более символов слова с последующим 0+ появлением 0+ пробелов,,
, 0+ пробелов, а затем 1+ слов символов.
В Python вы можете позже разделить значение группы 1 с помощью re.split(r'\s*,\s*', group_1_value)
чтобы получить отдельные имена модулей через запятую.