我有一个包含['\t30/30','\t10/10']
字符串的列表,因为我在一些名为grade的字符串的原始输入数据中使用了正则表达式。
number = re.findall(r'\t\d{1,3}\/\d{1,3}',grades)
number[:] = [item.replace('\t', '') for item in number]
如何删除列表“number”中每个元素中的\ t? 第二行给出了一个错误:
AttributeError: 'list' object has no attribute 'replace'
答案 0 :(得分:2)
我实际上无法重现你的问题。确保numbers
符合您的想法。它似乎是列表列表。
>>> grades = "bla bla \t23/40 foo bar bla \t12/20"
>>> number = re.findall(r'\t\d{1,3}\/\d{1,3}',grades)
>>> [item.replace("\t", "") for item in number]
['23/40', '12/20']
或者,您可以使用str.strip
使其缩短一点:
>>> [item.strip() for item in number]
['23/40', '12/20']
但是,我建议在正则表达式中使用捕获组,因此\t
甚至不是结果的一部分:
>>> re.findall(r'\t(\d{1,3}\/\d{1,3})',grades)
['23/40', '12/20']
或者为每个号码使用一个组,因此您不必在之后拆分它们:
>>> re.findall(r'\t(\d{1,3})\/(\d{1,3})',grades)
[('23', '40'), ('12', '20')]
答案 1 :(得分:1)
你可以试试这个:
import re
number = re.findall(r'\t\d{1,3}\/\d{1,3}',grades)
final_data = [re.findall('[^\t]+', i)[0] for i in number]
使用number = ['\t30/30','\t10/10']
运行此代码时,输出为:
['30/30', '10/10']
答案 2 :(得分:0)
data = ['\t30/30', '\t10/10']
no_tabs = filter(lambda x: x != '\t', data)
print(*no_tabs)
30/30 10/10