使用Python正则表达式从Craigslist RSS提取地址

3 投票
2 回答
1099 浏览
提问于 2025-04-17 01:46

我正在抓狂,想从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)

撰写回答