可以说,我有一个这样的名单:如何将一个列表元素变成两个?
bla = ['3,00 € 3,50 €\r\n', '3,00 €\r\n', '6,50 €\t5,50 €\r\n']
每次我有一个项目两个价格我想在两个项目把这个项目。 所以它看起来像这样:
['3,00 €', '3,50 €', '3,00 €', '6,50 €', '5,50 €']
可以说,我有一个这样的名单:如何将一个列表元素变成两个?
bla = ['3,00 € 3,50 €\r\n', '3,00 €\r\n', '6,50 €\t5,50 €\r\n']
每次我有一个项目两个价格我想在两个项目把这个项目。 所以它看起来像这样:
['3,00 €', '3,50 €', '3,00 €', '6,50 €', '5,50 €']
没有正则表达式:拆分根据欧元符号和格式化,扁平化的过程中列表,并剥离所有空格:
bla = ['3,00 € 3,50 €\r\n', '3,00 €\r\n', '6,50 €\t5,50 €\r\n']
result = ["{} {}".format(x.strip(),"€") for item in bla for x in item.split("€") if x.strip()]
print(result)
结果:
['3,00 €', '3,50 €', '3,00 €', '6,50 €', '5,50 €']
提取的<digits>,<digits> €
模式与正则表达式匹配所有的价格和扁平结果列表:
import re
l = [item for s in [re.findall("[0-9]+,[0-9]+\s?€", x) for x in bla] for item in s]
编辑:
更短,加入将您的列表转换为单个字符串并提取与所述模式匹配的所有字符串:
l = re.findall("[0-9]+,[0-9]+\s?€", " ".join(bla))
这可以简化为'[m for x in bla for m in re.findall(“[0-9] +,[0- 9] + \ s?€“,x)]' –
这里的(另一个)的方式来做没有正则表达式:
from itertools import chain
bla = ['3,00 € 3,50 €\v\n', '3,00 €\v\n', '6,50 €\t5,50 €\v\n']
result = [r for r in chain.from_iterable(((v+' €' for v in (y.strip()
for y in s.split('€') if y.strip()))
for s in bla))]
print(result)
输出:
['3,00 €', '3,50 €', '3,00 €', '6,50 €', '5,50 €']
您确定要保留\ r \ n,选项卡字符吗? –
不,我不想要他们:) – 1337
我编辑了你的问题,然后,:) –