使用正则表达式搜索列表

时间:2013-10-23 17:22:07

标签: python regex

我有一个字符串列表。我试图找到该列表中与正则表达式模式匹配的所有字符串。

我正在考虑使用循环/列表理解/过滤来实现。

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']

任何人都可以使用列表推导或过滤器给我一些如何实现我的想法的提示。

2 个答案:

答案 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']