使用正则表达式搜索列表

2024-06-16 09:37:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

有谁能给我一些提示,告诉我如何使用列表理解或过滤器来实现我的想法。在


Tags: 字符串re过滤器列表resultlistwordpattern
2条回答

如果你想要一个简单的列表理解:

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

输出:

^{pr2}$

你在找这个吗?在

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

相关问题 更多 >