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

标签 python list-comprehension re

与此问题类似:Regular Expressions: Search in list
但我想返回一个与搜索列表大小相同的列表,None''没有匹配项的地方:

import re

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

# looking for  ["", "cat", "wildcat", "thundercat", "", ""]
我尝试删除 filter但这会返回整个列表
也试过
[r.match(x) for x in mylist]
但这会返回:
[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]
我不知道如何提取字符串.group(0)None 引发错误
任何一种方法都有效,优先选择更快/更有效的方法,因为列表会很长

最佳答案

非正则表达式解决方案也应该没问题。
如果您希望字符串以 cat 结尾,您可以使用 str.endswith :

>>> [x if x.endswith('cat') else '' for x in mylist]
['', 'cat', 'wildcat', 'thundercat', '', '']
cat可以出现在字符串的任何位置,可以使用 in运算符(operator):
>>> [x if 'cat' in x else '' for x in mylist]
['', 'cat', 'wildcat', 'thundercat', '', '']

关于python - 正则表达式搜索列表,但返回相同大小的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68744239/

相关文章:

python - 数组的精确直方图

python - 获取 PEP8 "invalid escape sequence"警告试图在正则表达式中转义括号

Python正则表达式编译和搜索带有数字和单词的字符串

python - Python 中惰性 for 理解的文档

python - re.split ("", string) 和 re.split ("\s+", string) 之间的区别?

python - 从 ListField 中删除带有 FileField 的 EmbeddedDocument

python - 绑定(bind)错误: Unable to find a consistent port for localhost

python - Pandas 标量 UDF 失败,IllegalArgumentException

python - 在列表解析中实现三元条件运算符

python - 按列表列表中的索引对项目进行操作