我有一个字符串列表。我试图找到该列表中与正则表达式模式匹配的所有字符串。
我正在考虑使用循环/列表理解/过滤来实现。
Similar to this post. (但是,我不太明白该帖子中的r.match是什么,所以我开始了一个单独的线程。)
import re
word_list = ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
# start with letter C/D and then follow by digit
pattern = re.compile('^[CD]\d.*')
result_list = []
for word in word_list:
try:
result_list.append(re.findall(pattern, word)[0])
except:
pass
print word_list
print result_list
# OUTPUT >>
['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
['C3S3', 'D4D4']
任何人都可以使用列表推导或过滤器给我一些如何实现我的想法的提示。
答案 0 :(得分:2)
In [1]: import re
In [2]: l = ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
In [3]: l2=filter(lambda x:re.match(r'^[CD]\d.*',x), l)
In [4]: l
Out[4]: ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
In [5]: l2
Out[5]: ['C3S3', 'D4D4']
答案 1 :(得分:1)
如果你想要一个简单的列表理解:
import re
word_list = ['A1S3', 'B2B4', 'C3S3', 'D4D4', 'E5B3', 'F6D1']
pattern = re.compile(r'^[CD]\d') # don't need the .* to just search for pattern
result_list = [x for x in word_list if re.search(pattern,x)]
输出:
['C3S3', 'D4D4']