与此问题类似: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/