Python(Google Colab)正则多条件匹配异常:无法筛选末尾仅单个1的三位数
问题分析与解决方案
原代码问题
你的代码里,第二个判断条件item != re.match(r'\d11', item).group()会导致符合要求的项被异常捕获跳过:
- 当字符串不是
x11格式时,re.match(r'\d11', item)返回None,调用.group()会触发AttributeError,被try-except捕获后直接跳过print,所以加了and后没有输出。
简化解决方案(无需正则,更高效)
直接通过字符串索引判断最后一位是1且倒数第二位不是1,同时简化三位数列表的生成:
# 生成000-999的三位数字符串列表 num_list = [f"{num:03d}" for num in range(1000)] for item in num_list: # 判断最后一位是1,且倒数第二位不是1 if item[-1] == '1' and item[-2] != '1': print(item)
正则解决方案
如果一定要用正则,直接写精准匹配的表达式,用re.fullmatch匹配整个字符串:
import re num_list = [f"{num:03d}" for num in range(1000)] # 匹配三位数字:第一位任意数字,第二位非1,第三位是1 pattern = re.compile(r'\d[^1]1') for item in num_list: if pattern.fullmatch(item): print(item)
内容的提问来源于stack exchange,提问作者haka
相关产品推荐
相关产品推荐

