我的字符串列表很大,我想过滤括号内的所有内容,因此我使用以下正则表达式:
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,并且可以正常工作。但是,当我应用上述正则表达式时,我得到一个空列表:
[]
关于如何从列表中过滤括号内的所有标记的任何想法?
答案 0 :(得分:1)
您的正则表达式还可以(尽管您可能不想在匹配中捕获括号),但是search()
是错误的使用方法。您希望findall()
获取所有匹配项的文本,而不是第一个匹配项的索引:
list(map(r.findall, text_list))
这将为您提供一个列表列表,其中每个内部列表都包含括号内的字符串。
例如,输入以下内容:
text_list = ['asdf (qwe) asdf (gdfd)', 'xx', 'gdfw(rgf)']
结果是:
[['(qwe)', '(gdfd)'], [], ['(rgf)']]
如果要排除括号,请稍微更改正则表达式:
'\(([^)]*)\)'
转义的括号内未转义的括号表示要捕获的内容。