如何按指定模式移除列表中以'JKE0'开头的字符串,现有代码执行无效果?
问题原因
你的代码存在三个明显错误:
- 关键字拼写错误:Python的匿名函数关键字是
lambda,你写的lamda少了字母b,本身就存在语法问题 - 正则方法调用错误:
r.match是正则匹配方法本身,没有传入待匹配的字符串执行调用,方法对象永远不可能和字符串a相等,所以所有元素都被保留,列表长度自然不会变化 - 筛选逻辑错误:
filter()会保留判定结果为真的元素,你要移除符合开头规则的元素,需要对匹配结果取反,保留匹配失败的元素
修正方案
正则版本
注意re.match()本身就默认从字符串开头匹配,刚好符合你的需求:
import re new_list = list(x) r = re.compile(r'JKE0') # 筛选所有不以JKE0开头的元素 rslt = list(filter(lambda a: not r.match(a), new_list))
更简单的非正则版本
如果不需要复杂规则,直接用字符串内置的startswith()方法性能更高,也不需要导入正则库:
new_list = list(x) rslt = [a for a in new_list if not a.startswith('JKE0')]
内容的提问来源于stack exchange,提问作者newbzzs
相关产品推荐
相关产品推荐

