我有这样的元素列表:
['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
我的问题是:
如何从此列表的元素中删除特定字符?
因此我希望:
['test', 'test', '1989', 'test', '']
任何建议,解决方案?
提前致谢。
答案 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)
当然,这不是格式最好或最容易阅读的答案。这将映射一个匿名函数,该函数查找并返回括号内的内容到列表的每个元素,返回整个列表。
(?<=...)
表示“仅匹配在开头具有此内容,但不包含在结果中
(?=...)
表示“仅匹配结尾处有此内容,但不包含在结果中
.+
表示“至少有一个任何类型的角色”