使用Python正则表达式从Craigslist RSS提取地址
我正在抓狂,想从craigslist的RSS源中提取位置信息。
我使用了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
试试用 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
这段代码有语法错误。你不能把字符串连接在一起或者格式化字符串,除非这些字符串是用引号括起来的。你可以试试:
addressStart = r'!-- CLTAG xstreet0='
addressEnd = r'-->'
prog = re.compile(addressStart + r'(.*?)' + addressEnd)
result = prog.match(string)