0

我有这样的元素列表:

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

我的问题是:

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

结果我想要:

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

任何建议,解决方案?

提前致谢。

4

5 回答 5

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]
于 2012-06-08T22:27:01.207 回答
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', '']
于 2012-06-08T22:26:20.250 回答
0

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

于 2012-06-08T22:26:40.423 回答
0

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

stripped = []
for x in my_data:
    m = re.search("{.*}", x)
    stripped.append(m.group if m else x)
于 2012-06-08T22:29:53.793 回答
0
t = ['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
map(lambda string: re.search(r'(?<=\{).+(?=\})', string).group(0), t)

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

(?<=...)意思是“只匹配开头有这个的,但不包含在结果中

(?=...)意思是“只匹配最后有这个的,但不要把它包含在结果中

.+意思是“至少一个任何种类的字符”

于 2012-06-08T22:31:16.210 回答