正则表达式搜索列表,但返回相同大小的列表

R.M*_*.M. 3 python list-comprehension python-re

与此问题类似:正则表达式:在列表中搜索

但我想返回搜索列表的大小相同的列表,None''在没有比赛:

import re

mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
list(filter(r.match, mylist)) 

# looking for  ["", "cat", "wildcat", "thundercat", "", ""]
Run Code Online (Sandbox Code Playgroud)

我尝试删除filter但返回整个列表

也试过

[r.match(x) for x in mylist]
Run Code Online (Sandbox Code Playgroud)

但这会返回:

[None,
 <regex.Match object; span=(0, 3), match='cat'>,
 <regex.Match object; span=(0, 7), match='wildcat'>,
 <regex.Match object; span=(0, 10), match='thundercat'>,
 None,
 None]
Run Code Online (Sandbox Code Playgroud)

我不知道如何提取字符串

.group(0) 引发错误 None

任何一种方法都有效,优先选择更快/更有效的方法,因为列表会很长

The*_*Guy 7

非正则表达式解决方案也应该没问题。

如果您希望字符串以 结尾cat,则可以使用str.endswith

>>> [x if x.endswith('cat') else '' for x in mylist]
['', 'cat', 'wildcat', 'thundercat', '', '']
Run Code Online (Sandbox Code Playgroud)

如果cat可以出现在字符串中的任何位置,则可以使用in运算符:

>>> [x if 'cat' in x else '' for x in mylist]
['', 'cat', 'wildcat', 'thundercat', '', '']
Run Code Online (Sandbox Code Playgroud)


sj9*_*126 5

这是一种方法:

[m.group(0) if m else "" for m in map(r.match, mylist)]
Run Code Online (Sandbox Code Playgroud)

产生:

['', 'cat', 'wildcat', 'thundercat', '', '']
Run Code Online (Sandbox Code Playgroud)