Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2012 09:25:34

pyhappy
От: Moscow/Russia
Зарегистрирован: 2011-11-13
Сообщения: 22
Репутация: +  0  -
Профиль  

Регулярное выражение для парсинга import statement

Добрый день.
Не получается написать регулярку, которая отбрали импортируемые модули, сейчас она выдает все включая import, хотелось бы чтобы import отсутствовал в результатах, но при этом именно с него должна начинаться строка

import re
pattern = r"(?:(\b\w+\b)[, ]?)"
string1 = "             import oss,sys,fff,gogg"
result = re.findall(pattern,string1)
#>>>result = ['import', 'oss', 'sys', 'fff', 'gogg']

до этого я использовал такое
pattern = r"^(?:[ ]+)?import ([A-z/.0-9]*)"
но оно работает только если импортируется один модуль, а не несколько как в примере string1

Офлайн

#2 Окт. 29, 2012 11:03:20

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Регулярное выражение для парсинга import statement

string1 = "             import oss,sys,fff,gogg"
s = re.findall(str_, "import .*")
result = [x.strip() for x in s.split(',')]
А вообще идея плохая. Что будет с from x import y? Или с import (x,y)? И еще с парой примеров?

Офлайн

#3 Окт. 29, 2012 11:38:40

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Регулярное выражение для парсинга import statement

import ast
умеет это

Офлайн

#4 Окт. 29, 2012 11:46:38

pyhappy
От: Moscow/Russia
Зарегистрирован: 2011-11-13
Сообщения: 22
Репутация: +  0  -
Профиль  

Регулярное выражение для парсинга import statement

sergeek
да, я знаю что можно было импортнуть всю строку с начала импорта до конца или до точки с запятой, но и потом обработать питоном, но чего уж очень хочется через re

Офлайн

#5 Окт. 29, 2012 13:25:08

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Регулярное выражение для парсинга import statement

тогда вот еще пара примеров:

re.findall('\w+', re.match(' *import (.+)','import ast, re').group(1))
Out[93]: ['ast', 're']
re.split('\W+', re.match(' *import (.+)','import ast, re').group(1))
Out[94]: ['ast', 're']
re.findall('\w+','import ast, re')[1:]
Out[95]: ['ast', 're']

Отредактировано sergeek (Окт. 29, 2012 13:53:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version