如何筛选出列表中不以数字开头的所有元素?
过滤列表中的数字元素,保留单词
嘿,我来帮你搞定这个问题!你已经找对了正则表达式的方向,现在只需要把它和re模块的方法结合起来用就行~
先看你的原始列表:
list1 = ['1','100', 'Stack', 'over','flow']
目标是得到只包含单词的列表:['Stack', 'over', 'flow']
方法一:用re.fullmatch判断纯数字元素
我们可以用正则表达式^[0-9]+$来匹配完全由数字组成的字符串,然后过滤掉这些元素。代码如下:
import re list1 = ['1','100', 'Stack', 'over','flow'] # 过滤掉所有纯数字的元素 result = [item for item in list1 if not re.fullmatch(r'^[0-9]+$', item)] print(result) # 输出: ['Stack', 'over', 'flow']
解释一下:re.fullmatch()会检查整个字符串是否完全匹配正则表达式,^[0-9]+$表示从开头到结尾都是一个或多个数字。如果匹配成功,说明这个元素是纯数字,我们用not把它排除掉,剩下的就是单词啦。
方法二:用你找到的[^0-9]实现
你之前找到的[^0-9]是匹配非数字字符,我们可以用它来判断元素中是否存在非数字字符——只要存在,就说明不是纯数字,应该保留。代码如下:
import re list1 = ['1','100', 'Stack', 'over','flow'] # 保留包含至少一个非数字字符的元素 result = [item for item in list1 if re.search(r'[^0-9]', item)] print(result) # 输出: ['Stack', 'over', 'flow']
这里re.search()会在字符串中查找是否有匹配的字符,只要找到一个非数字字符,就会返回匹配对象(条件为True),这个元素就会被保留;纯数字的元素找不到匹配,条件为False,就被过滤掉了。
两种方法都能达到你的需求,选哪种都可以~
内容的提问来源于stack exchange,提问作者Emil
相关产品推荐
相关产品推荐

