python正则表达式怎么匹配这段中文?

下面这段文字,用xpath找到后,需要把意大利和西班牙两部分所包含内容分开保存,用正则表达式应该怎么写?

<div class="des">
    <p>
        意大利:<br />
        1、全称意大利共和国<br />
        2、由南欧的亚平宁半岛及两个位于地中海中的岛屿西西里岛与萨丁岛所组成<br />
        3、国土面积为301333平方公里<br />
        <br />
        西班牙:<br />
        1、1492年10月12日独立<br />
        2、是一个位于欧洲西南部的国家<br />
        3、西邻同处于伊比利亚半岛的葡萄牙,北濒比斯开湾,东北部与法国及安道尔接壤,南隔直布罗陀海峡与非洲的摩洛哥相望<br />
    </p>
</div>

我是这样写的,但是总是匹配不出来:

desc =sel.xpath('//div[@class="des"]').extract()[0]
item['italy'] = re.search('意大利:(.*?)西班牙',desc,re.S).group(1)
item['spain'] = re.search('西班牙:(.*?)</p>',desc,re.S).group(1)

提示信息是:
备注:网页是gbk编码

AttributeError: 'NoneType' object has no attribute 'group'
阅读 4k
1 个回答

你缺了跨行匹配

如果你的desc是str

desc =sel.xpath('//div[@class="des"]').extract()[0]
item['italy'] = re.search('意大利:(.*?)西班牙',desc,re.S | re.M).group(1)
item['spain'] = re.search('西班牙:(.*?)</p>',desc,re.S | re.M).group(1)

如果你的desc是unicode

desc =sel.xpath('//div[@class="des"]').extract()[0]
item['italy'] = re.search(u'意大利:(.*?)西班牙',desc,re.S | re.M).group(1)
item['spain'] = re.search(u'西班牙:(.*?)</p>',desc,re.S | re.M).group(1)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题