scrapy正则表达式找不到长冲刺

时间:2015-06-05 11:51:38

标签: python regex python-2.7 scrapy

我使用scrapy xpath + re从网页中提取数据。字符是unicode(俄语),所有要提取的字符串都包含长短划线(python code' \ u2014') 问题是我的正则表达式无法找到一个完整的字符串并通过长划线将其拆分。这对我来说真的很不方便。 以下是我已经尝试过的一些例子,但它没有成功:

response.xpath('some xpath goes here').re(r'[\w\s\\u2014\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\\u2014\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\\x2014\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\\uFFFF\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\.,—]+')
response.xpath('some xpath goes here').re(r'[\w\s\u(\w){4}\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s(\u(\d)){6}\.,]+')

版本:Python 2.7,Scrapy 0.24.6

1 个答案:

答案 0 :(得分:1)

将您的模式转换为unicode字符串,不要逃避\

response.xpath('some xpath goes here').re(ur'[\w\s\u2014\.,]+')

此外,我猜您可能希望使用re.UNICODE标记,因此\w\s将匹配所有Unicode字和空白字符。根据Scrapy文档selector.re不支持标志,但它可以使用编译的正则表达式,所以你可以这样做:

import re
response.xpath('some xpath goes here').re(re.compile(ur'[\w\s\u2014\.,]+', re.UNICODE))