如何删除除数字和“,”之外的所有字符&引用;来自python中的unicode字符串?

如何删除除数字和“,”之外的所有字符&引用;来自python中的unicode字符串?,python,xpath,unicode,scrapy,Python,Xpath,Unicode,Scrapy,我正在用scrapy写一个小爬虫。 XPath的一个特性是包含price,后跟“zł”(波兰货币标记)。问题是它被新行字符、空格和非中断空格混淆了。 因此,当我这样做时: sel.xpath("div/div/span/span/text()[normalize-space(.)]").extract() 我得到: [u'\n 1\xa0740,00 z\u0142\n \n \n '] 我想换成

我正在用scrapy写一个小爬虫。 XPath的一个特性是包含price,后跟“zł”(波兰货币标记)。问题是它被新行字符、空格和非中断空格混淆了。 因此,当我这样做时:

sel.xpath("div/div/span/span/text()[normalize-space(.)]").extract()
我得到:

[u'\n            1\xa0740,00 z\u0142\n            \n            \n                ']
我想换成

[u'1740,00']
或者简单地转换成浮点变量。
执行此操作的/最佳/最简单/最快的方法是什么?

您可以使用
re.findall
从字符串中提取字符:

>>> import re
>>> s = u'\n            1\xa0740,00 z\u0142\n            \n            \n            '
>>> L = re.findall(r'[\d,]', s)
>>> "".join(L)
'1740,00'

如果您只对ascii数字感兴趣,则:

您可以使用Unicode
.translate()更简洁地编写它:


结果是一样的,但是。

我得到的结果是这样的
raw_price=sel.xpath(“div/div/span/span/text()”)。extract()项['cena']=raw_price[0]。strip()
@Lord_JABA:
。strip()
只删除前导和尾随的空格。也许,这里最灵活的解决方案是使用正则表达式。但是如果我们使用
.strip()
@Nikhil:
s.strip(),这些字符不会出现在最终保存中
将为您提供
'1\xa0740,00 zł'
,这不是OP想要的。@eugeney我在抓取时经常遇到这些字符,但当我插入数据库时,说
mongo
为什么我得到实际数据,或者即使我在csv上打印,我可能是错的
import string

keep = string.digits.encode() + b',' # characters to keep
delete = bytearray(set(range(0x100)) - set(bytearray(keep))) # to delete
result = unicode_string.encode('ascii', 'ignore').translate(None, delete).decode()
import string
import sys

keep = set(map(ord, string.digits + ',')) # characters to keep
table = dict.fromkeys(i for i in range(sys.maxunicode + 1) if i not in keep)
result = unicode_string.translate(table)