使用代码:
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','.']
中的内容
因为要删除的字符串在某些情况下可能不同怎么做?
答案 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.isdigit
与generator 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'