如何避免Python正则表达式re.findAll函数匹配结果出现空字符串
问题原因
你当前使用的正则规则[0-9]*中的*量词表示匹配前一个规则0次或多次,这就导致非数字字符所在的位置、字符串首尾的空位置都会被匹配到长度为0的空字符串,这就是返回结果里出现大量空值的原因。
解决方案
- 方案1:修改正则从根源避免空匹配
把正则中的*替换为+,+量词表示匹配前一个规则至少1次,只会匹配到长度≥1的数字串,不会产生空结果。
修改后的测试代码:
import re myre = r"[0-9]+" print(re.findall(myre,"23")) # 输出 ['23'] print(re.findall(myre,"23 is a good number.")) # 输出 ['23']
- 方案2:匹配完成后过滤空字符串
如果不想修改原有正则,可以对返回的结果做过滤,利用空字符串为布尔假值的特性直接筛选:
import re myre = "[0-9]*" res = re.findall(myre,"23 is a good number.") res = list(filter(None, res)) # 过滤所有空字符串 print(res) # 输出 ['23']
内容的提问来源于stack exchange,提问作者zell
相关产品推荐
相关产品推荐

