Использование регулярного выражения Python для извлечения адресов из RSS-канала Craigslist - PullRequest
3 голосов
/ 08 сентября 2011

Я вырываю свои волосы, пытаясь разобрать RSS-канал Craigslist для извлечения информации о местоположении.

Я использовал feedparser , чтобы разобрать скрипт в записи и описания записей.К сожалению, информация об адресе содержится в неправильных тегах в разделе описания.

адреса содержатся в разделе, который выглядит следующим образом:

<!-- CLTAG xstreet0=11832 se 318pl  -->
<!-- CLTAG xstreet1= -->
<!-- CLTAG city=auburn -->
<!-- CLTAG region=wa -->
11832 se 318pl 

Feedparser не нравится эти CLTAGS.Моя попытка захватить первую строку с помощью регулярного выражения выглядела так:

addressStart = r'!-- CLTAG xstreet0='
addressEnd = r'-->'

prog = re.compile(addressStart(.*?)addressEnd)
result = prog.match(string)

... Но это не сработало.Что я делаю неправильно?вот ссылка на RSS-ленту, с которой я работаю 'http://seattle.craigslist.org/see/apa/index.rss'

Любая помощь очень ценится!

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Попробуйте search вместо match (Причина в том, что строка начинается с <, но вы определили addressStart, чтобы начать с !. search находит совпадение в любом месте строки, в то время как match находит совпадения только в начале, в противном случае вы могли бы переопределить addressStart, чтобы он содержал ведущий <.)

>>> import re;
>>> addressStart = r'!-- CLTAG xstreet0='
>>> addressEnd = r'-->'
>>> prog = re.compile(addressStart + "(.*?)" + addressEnd)
>>> string = "<!-- CLTAG xstreet0=11832 se 318pl  -->"
>>> result = re.search(prog, string)
>>> result
<_sre.SRE_Match object at 0x1004806c0>
>>> result.group(1)
'11832 se 318pl  '
2 голосов
/ 08 сентября 2011

Это неверный синтаксис.Вы не можете объединять / форматировать строки, если строки не заключены в кавычки.Попробуйте:

addressStart = r'!-- CLTAG xstreet0='
addressEnd = r'-->'

prog = re.compile(addressStart + r'(.*?)' + addressEnd)
result = prog.match(string)
...