蓝桥杯中关于匹配字符串的问题解析

请求出在 12345678 (含)至98765432(含)中,有多少个数中完全不包含2023。
完全不包含2023是指无论将这个数的哪些数位移除都不能得到2023。例如 20322175,33220022 都完全不包含2023,而20230415,20193213则含有2023(后者取第1,2,6,8个数位)。

解题步骤:计算出含2023数字的个数,然后再作差。

新手容易进入的误区:

for i in range(12345678,98765432+1):
    if '2023' in str(i):
        print(i)

这样只能匹配到数字中含有的2023是连在一起的。

显然,这不符合题目的要求。

正确的方式:

import re

pat = re.compile('\d*'+'\d*'.join('2023')+'\d*')
for i in ['2023', '1012023','12320123000','10213']:
    match = re.search(pat, i)
    if match:
        print(match.group())

运行结果:

2023
1012023
12320123000

PS:

import re

pat = re.compile('\d*'.join('2023'))
for i in ['2023', '1012023','12320123000','10213']:
    match = re.search(pat, i)
    if match:
        print(match.group())

运行结果:
2023
2023
2320123

只会输出匹配开始到匹配结束的一段数字,而不是把含有这段数字的整个数字输出

就是两段代码的区别

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值