用Python规范化空格

时间:2017-09-30 09:04:49

标签: python string xpath scrapy

我正在使用scrapy构建数据提取,并希望规范化从HTML文档中提取的原始字符串。这是一个示例字符串:

  Sapphire RX460 OC  2/4GB

注意两个空格组在字符串文字之前以及OC2之间的空格。

Python按照How do I trim whitespace with Python?中的描述提供修剪但是这不会处理OC2之间的两个空格,我需要将它们折叠到一个空格中。

我尝试使用来自XPath的normalize-space(),同时使用我的scrapy Selector提取数据并且该数据有效,但分配详细,右向漂移很强:

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()

有没有一种使用Python规范化空格的优雅方法?如果不是单行,有没有办法可以将上面的行划分为更容易阅读的内容而不会出现缩进错误,例如。

product_title = product.css('h3')
    .xpath('normalize-space((text()))')
    .extract_first()

3 个答案:

答案 0 :(得分:14)

您可以使用:

" ".join(s.split())

其中s是您的字符串。

答案 1 :(得分:1)

而不是使用正则表达式,更有效的解决方案是使用join / split选项,观察:

>>> timeit.Timer((lambda:' '.join(' Sapphire RX460 OC  2/4GB'.split()))).timeit()
0.7263979911804199

>>> def f():
        return re.sub(" +", ' ', "  Sapphire RX460 OC  2/4GB").split()

>>> timeit.Timer(f).timeit()
4.163465976715088

答案 2 :(得分:0)

您可以使用下面的函数和正则表达式来扫描连续的空格并将它们替换为1个空格

import re

def clean_data(data):
    return re.sub(" {2,}", " ", data.strip())

product_title = clean(product.css('h3::text').extract_first())

然后改善你喜欢的清洁功能