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

3

我正在努力剖析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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接