剥离列表

时间:2017-03-08 13:38:32

标签: python string xpath strip

使用代码:

from lxml import html
import requests

tree = html.fromstring(requests.get('http://selectshop.pl/deskorolka-blaty-decki,40/1').content)
print [elem.encode('utf8').replace(',','.') for elem in    tree.xpath('//span[@class="price"]/text()')]

我收到的字符串列表如'189.00 z\xc5\x82'。 我想从列表的每个元素中删除z\xc5\x82部分。我可以使用.strip(' z\xc5\x82')但我想从第一个字符(左起)开始删除所有不在列表['0','1','2','3','4','5','6','7','8','9','.']中的内容 因为要删除的字符串在某些情况下可能不同怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用regex,例如:

import re

s = "189.00 z\xc5\x82"
s = re.sub(r"[^\d.]", "", s)

print(s) # prints "189.00"

因此您需要更改此部分:

elem.encode('utf8').replace(',','.')

分为:

re.sub(r"[^\d.]", "", elem.encode('utf8').replace(',','.'))

答案 1 :(得分:0)

使用str.isdigitgenerator expression仅过滤数字和点,然后str.join将过滤后的字符加回字符串:

>>> ''.join(c for c in '189.00 z\xc5\x82' if c.isdigit() or c == '.')
'189.00'
>>> allowed_chars = set(['0','1','2','3','4','5','6','7','8','9','.'])
# OR   allowed_chars = set('0123456789.')
>>> ''.join(c for c in '189.00 z\xc5\x82' if c in allowed_chars)
'189.00'