我只需要从以下字符串中提取价格

0 人关注

我的程序从不同的网站搜刮产品价格,其中一些网站返回的价格是 \\n\\n 9.99 €\\n \\n ,另一些网站返回的价格是 \\n\\n 6.99 €\\n \\n\\n 4.99 €\\n \\n

我想从字符串中只得到数字。我曾尝试使用 .strip('\\n') ,但它似乎无法删除任何 \\n

1 个评论
尝试使用smt如 import re ; re.search(r'(\d*\.\d{,2})', '\n\n 9.99 €\n \n' ).group(1) 。岳阳可以使用正则表达式来验证你的数据。 doc
python
string
strip
unknown
unknown
发布于 2022-04-02
3 个回答
eshapiro42
eshapiro42
发布于 2022-04-02
0 人赞同

要删除换行符,你可以用 string.replace("\n", "") 来替换所有 \n 的字符为空字符串。在你的例子中,这将使你得到 " 6.99 € 4.99 € "

如果你想获得这些实际的数字,你可以用 string.strip 剥离外部的空白,然后用 string.split 在欧元符号之间分割,例如。 s.replace("\n", "").strip().split("€") 。对于你的例子,这将输出 ['6.99 , ' 4.99 ', ''] ,一个字符串的列表。

你可以用列表理解的方式把实际数字拿出来。把这一切联系起来。

string = "\n\n 6.99 €\n \n\n 4.99 €\n \n"
string_to_list = string.replace("\n", "").strip().split("€")
numbers = [float(s.strip()) for s in string_to_list if s != ""]

对于你的例子,这就产生了[6.99, 4.99]

jera
jera
发布于 2022-04-02
0 人赞同

如果这些是杂乱无章的唯一字符,你可以删除它们,然后将价格分成一个列表。

s = "\\n\\n          6.99 €\\n        \\n\\n        4.99 €\\n      \\n"
l = s.replace("\\n", "").replace("€", "").split()

This will produce the list ['6.99', '4.99']

cards
cards
发布于 2022-04-02
0 人赞同

用正则表达式来验证你的数据,简称 regex .数据的类型将影响要使用的模式的类型。这里我使用了: r'(\d*\.\d{,2})' ,意思是找到一个数字(或没有数字),后面是.和零或数字,所以它是为浮动数字设计的。

import re
string_values = ['\\n\\n        9.99 €\\n      \\n', '\\n\\n          6.99 €\\n        \\n\\n        4.99 €\\n      \\n']
pattern = re.compile(r'(\d*\.\d{,2})')
values = list(map(float, sum([pattern.findall(s) for s in values], [])))
print(values)

Output

[9.99, 6.99, 4.99]