python challenge 第三关解法 http://www.pythonchallenge.com

import re


s = ''.join(s.split())


fetch = re.compile(r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]').findall


print ''.join(fetch(s))


结果为:linkedlist


s 为第三关网页源码中的被注释的部分,第三关网页为:http://www.pythonchallenge.com/pc/def/equality.html


解决这关的关键就在于第三关图片下面的图示信息:

One small letter, surrounded by EXACTLY three big bodyguards on each of its sides.

该句的意思是:有一个小写字母,它的两边有三个大写字母。

这句话的关键点在于 EXACTLY 表达的意思,其实它的意思是表示 这个小写字母两边只有三个大写字母,是”只有“。

本人英文比较烂,刚开始的时候,自认为小聪明,以为 EXACTLY 是大写的、粗体字,还比其他单词要大,于是自然而然的写下了如下正则:

fetch = re.compile(r'[EXACTLY]{3}([a-z])[EXACTLY]{3}').findall

可是运行起来才发现,错啦,-_-

于是转化思路,再次写了个错误正则

fetch = re.compile(r'[A-Z]{3}([a-z])[A-Z]{3}').findall

-_-到底咋回事呢,原来,我还是没完全搞懂意思,其实应该是小写字母的两边只能有3个大写字母,不能多,也不能少,所以正确的正则应该是:

fetch = re.compile(r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]').findall

很受伤呀……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值