我有这样的元素列表:
['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
我的问题是:
如何从此列表的元素中删除特定字符?
结果我想要:
['test', 'test', '1989', 'test', '']
任何建议,解决方案?
提前致谢。
>>> 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]
您可以使用正则表达式,如下所示:
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', '']
Python 的strip()
函数正是这样做的——从字符串的末尾删除特定字符——但可能有更好的方法来做你想做的事。
您还没有确切地说出模式是什么,或者如果没有大括号,您想要什么,但这将适用于您的示例:
stripped = []
for x in my_data:
m = re.search("{.*}", x)
stripped.append(m.group if m else x)
t = ['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
map(lambda string: re.search(r'(?<=\{).+(?=\})', string).group(0), t)
当然,这不是格式最正确或最容易阅读的答案。这映射了一个匿名函数,该函数查找括号内的内容并将其返回到列表的每个元素,从而返回整个列表。
(?<=...)
意思是“只匹配开头有这个的,但不包含在结果中
(?=...)
意思是“只匹配最后有这个的,但不要把它包含在结果中
.+
意思是“至少一个任何种类的字符”