0

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

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

类似于这个帖子。 (但是,我不太明白那篇文章中的 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']

谁能给我一些关于如何使用列表推导或过滤器来实现我的想法的提示。

4

2 回答 2

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']
于 2013-10-29T17:16:53.123 回答
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']
于 2013-10-29T17:25:21.410 回答