尝试过滤列表中的字符串时出现问题?

时间:2018-07-08 08:21:05

标签: python regex string python-3.x text

我的字符串列表很大,我想过滤括号内的所有内容,因此我使用以下正则表达式:

text_list = [' 1__(this_is_a_string) 74_string__(anotherString_with_underscores) question__(stringWithAlot_of_underscores) 1.0__(another_withUnderscores) 23:59:59__(get_arguments_end) 2018-05-13 00:00:00__(get_arguments_start)']

import re
r = re.compile('\([^)]*\)')
a_lis = list(filter(r.search, text_list))
print(a_lis)

我测试了我的正则表达式here,并且可以正常工作。但是,当我应用上述正则表达式时,我得到一个空列表:

[]

关于如何从列表中过滤括号内的所有标记的任何想法?

1 个答案:

答案 0 :(得分:1)

您的正则表达式还可以(尽管您可能不想在匹配中捕获括号),但是search()是错误的使用方法。您希望findall()获取所有匹配项的文本,而不是第一个匹配项的索引:

list(map(r.findall, text_list))

这将为您提供一个列表列表,其中每个内部列表都包含括号内的字符串。

例如,输入以下内容:

text_list = ['asdf (qwe) asdf (gdfd)', 'xx', 'gdfw(rgf)']

结果是:

[['(qwe)', '(gdfd)'], [], ['(rgf)']]

如果要排除括号,请稍微更改正则表达式:

'\(([^)]*)\)'

转义的括号内未转义的括号表示要捕获的内容。