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
任何一种方法都有效,优先选择更快/更有效的方法,因为列表会很长
非正则表达式解决方案也应该没问题。
如果您希望字符串以 结尾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)
这是一种方法:
[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)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |