使用regex时无法提取特定字段检索方法。 显示的错误为:
raw_add = re.search(search_add.decode('utf-8'),i.decode('utf-8')).group()
AttributeError: 'NoneType' object has no attribute 'group'
我的代码如下:
import urllib2
import re
from json import dump
dumped_data = []
url = 'http://levi.in/store-finder/content/cityAddress.xml'
data = urllib2.urlopen(url).read()
class theAddress():
city = ""
state = ""
lat = ""
lng = ""
area = ""
addr = ""
broken_pieces = re.compile('(?<=marker ).+?(?="\/>)')
all_broken_pieces = re.findall(broken_pieces,data)
search_add = '(?<=html=").+?(?=Tel|<\/p>)'
for i in all_broken_pieces:
obj = theAddress()
obj.city = re.search('(?<=city=").+?(?=")',i).group()
obj.state = re.search('(?<=state=").+?(?=")',i).group()
obj.lat = re.search('(?<=lat=").+?(?=")',i).group()
obj.lng = re.search('(?<=lng=").+?(?=")',i).group()
obj.area = re.search('(?<=label=").+?(?=")',i).group()
raw_add = re.search(search_add.decode('utf-8'),i.decode('utf-8')).group()
try:
process1 = re.sub('<h5>','',raw_add)
process2 = re.sub('</h5>',' ',process1)
process3 = re.sub('<p>','',process2)
process4 = re.sub('<br />',' ',process3)
process5 = re.sub('</p>','',process4)
process6 = re.sub('&','&',process5)
obj.addr = process6
except:
pass
dumped_data.append(obj.__dict__)
f = open('levis_address1111.json','w')
dump(dumped_data, f, indent = 1)
这里的问题是,每当正则表达式匹配的地址以“Tel”结尾时,数据就会被提取出来,但当它以“<;/p>;”结尾时,错误就会弹出。你知道吗
正如beerbajay所建议的,如果您想绕过这个错误,请在尝试提取组之前检查是否有匹配项(正如错误所说,这对NoneType不起作用(没有regex匹配项))。你知道吗
尝试您的示例并打印一些调试信息,我发现:
第一个'debug i'是包含“Tel”的字符串,因此存在匹配项。在第二个示例中,我没有看到任何<;/p>;,因此您的正则表达式不匹配。您可能需要对regex进行更多的调试/包括更多可能的场景。 实际上,通常最好不要使用regex进行html/xml解析。你知道吗
刚刚调试了一段代码,字符串似乎是html转义的,所以您应该将regex改为:
相关问题 更多 >
编程相关推荐