Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Май 10, 2007 11:24:51

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  2  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

Всем привет.
Подскажите как мне выдрать из текста название городов?

<a href=“?cityid=574&lang=en” class=“citylist_city”>Air Force Academy (15)</a><br>
<a href=“?cityid=575&lang=en” class=“citylist_city”>Alamosa (1)</a><br>
<a href=“?cityid=576&lang=en” class=“citylist_city”>Applewood (0)</a><br>
<a href=“?cityid=577&lang=en” class=“citylist_city”>Arvada (6)</a><br>
<a href=“?cityid=578&lang=en” class=“citylist_city”>Aurora (8)</a><br>
<a href=“?cityid=579&lang=en” class=“citylist_city”>Berkley (0)</a><br>
<a href=“?cityid=580&lang=en” class=“citylist_city”>Black Forest (0)</a><br>
<a href=“?cityid=581&lang=en” class=“citylist_city”>Boulder (24)</a><br>
Т.е. должно получиться:
Air Force Academy
Alamosa
Applewood



Офлайн

#2 Май 10, 2007 12:27:24

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

:)
s



Офлайн

#3 Май 10, 2007 12:33:30

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  2  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

ofigetitelno, так не подойдет т.к. это я выдрал кусок из html файла. А по сути у меня имеется обычная html страничка в которой помимо тэгов <a> есть еще и друга куча тегов.



Офлайн

#4 Май 10, 2007 12:51:29

ods
От:
Зарегистрирован: 2007-03-03
Сообщения: 47
Репутация: +  0  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

Зависит от того, насколько может меняться оформление ссылок в HTML. Вот вариант, основанный на некоторых предположениях (возможны перестановки атрибутов, для нужных ссылок всегда проставлен (и только один) класс citylist_city и ещё ограничения по мелочам, чтоб не слишком усложнять регексп:

re.compile(r'<a*\s+class=?citylist_city?*>(?P<city>+)\s+\((?P<count>\d+)\)</a>').findall(text)



Отредактировано (Май 10, 2007 13:29:19)

Офлайн

#5 Май 10, 2007 19:13:26

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

Регулярними виразами то не получиться. Є така штука - HTMLParser, нею дуже легко можна розпарсити хтмл-ку. Пишуть що вона погано парсить, але я пробував і в мене вона працювала без всяких помилок.



Офлайн

#6 Май 10, 2007 21:30:12

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  2  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

Спасибо всем, но я выкрутился по другому, все теми же регулярными выражениями

m = re.search('<a href=(.*)>(.*) \(\d+\)</a><br>', line, re.DOTALL)
m.group(2)



Офлайн

#7 Май 11, 2007 09:52:53

ods
От:
Зарегистрирован: 2007-03-03
Сообщения: 47
Репутация: +  0  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

alafin
Спасибо всем, но я выкрутился по другому, все теми же регулярными выражениями
Код получился сильно завязанным на текущее оформление HTML. Хорошо, если его изменение не предполагается. Если же в одной строке окажутся 2 ссылки, то он перестанет работать. Кроме того, имеет ли смысл использовать внешний цикл с проверкой, если есть методы findall и finditer?



Офлайн

#8 Май 11, 2007 10:33:02

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  2  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

ods, мне как раз и нужно было забрать информацию именно с одного сайта, что успешно и получилось.



Офлайн

#9 Июль 17, 2007 10:53:00

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

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

reg = re.compile (r“\ACN=(?P<need>.*),OU=(?P<OU>PCs.*|S.*),OU=UKR”)
spl = re.split (r“\”“, s)
for i in spl:
if (i != ”\n"):
i = str (i)
ss = reg.match (i)
print ss.group ('need')

Выдает ошибку:

Traceback (most recent call last):
File “<string>”, line 74, in run_nodebug
File “D:\Docs\Python\DelPC.py”, line 18, in <module>
print ss.group ('need')
AttributeError: ‘NoneType’ object has no attribute ‘group’
Если вместо ss = reg.match (i) вставляю ss = reg.match ('CN=OFF_PC_1,OU=PCs,OU=KKK,DC=gold,DC=lan') , то все получается. Даже не знаю, где уже копать :(



Отредактировано (Июль 17, 2007 10:53:46)

Офлайн

#10 Июль 17, 2007 12:49:06

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Работы с регулярными выражениями

А значение i смотрел при ошибке?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version