Python - 从列表中删除字符

时间:2012-06-08 22:24:11

标签: python list

我有这样的元素列表:

['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']

我的问题是:

如何从此列表的元素中删除特定字符?

因此我希望:

['test', 'test', '1989', 'test', '']

任何建议,解决方案?

提前致谢。

5 个答案:

答案 0 :(得分:4)

>>> re.findall(r'\{(.*)\}', '1:{test}')
['test']

用它做一个循环:

[(re.findall(r'\{(.*)\}', i) or [''])[0] for i in your_list]

或者也许:

[''.join(re.findall(r'\{(.*)\}', i)) for i in your_list]

答案 1 :(得分:1)

您可以使用正则表达式,如下所示:

import re

s = re.compile("\d+:{(.*)}")

data = ['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']

result = [s.match(d).group(1) if s.match(d) else d for d in data]

结果

['test', 'test', '1989', 'test', '']

答案 2 :(得分:0)

Python的strip()函数就是这样 - 从字符串的末尾删除特定的字符 - 但是可能有更好的方法来做你想要的。

答案 3 :(得分:0)

如果没有大括号,你还没有确切地说出模式是什么,或者你想要什么,但这将适用于你的例子:

stripped = []
for x in my_data:
    m = re.search("{.*}", x)
    stripped.append(m.group if m else x)

答案 4 :(得分:0)

t = ['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
map(lambda string: re.search(r'(?<=\{).+(?=\})', string).group(0), t)

当然,这不是格式最好或最容易阅读的答案。这将映射一个匿名函数,该函数查找并返回括号内的内容到列表的每个元素,返回整个列表。

(?<=...)表示“仅匹配在开头具有此内容,但不包含在结果中

(?=...)表示“仅匹配结尾处有此内容,但不包含在结果中

.+表示“至少有一个任何类型的角色”