python challenge 第三关

        网址:http://www.pythonchallenge.com/pc/def/equality.html

   我之前不幸地被本题难住,原因很简单,"One small letter, surrounded by EXACTLY three big bodyguards on each of its sides.",我的理解如图所示:

 

    也就是说,我以为上下左右分别被三个相同的字母围着,于是没有得到答案,只知道明白原句是指一个小写字母,两边正好都是三个大保镖(引申为三个大写字母,另外,each side我理解成上下左右四面。上网搜索后,发现实际问题为:求YXZaOPQ 中的 a。

    可想而知,以自己的英语水平,面对使用了一小点修辞手法的语句就歇菜了。就像我前两天在做coursera上的Image and video processing第一周的课程时,看到 rotation matrix,本意是指那个特定的旋转矩阵,结果我理解成原矩阵旋转后得到的新矩阵,导致那题无从下手。惨惨惨!

    搞清问题了,就好说了,我来默写代码吧……网上的代码已经足够简略,一时也想不到不用正则表达式的优美解法。

import re
import urllib2

file = urllib2.urlopen("http://www.pythonchallenge.com/pc/def/equality.html")
text = file.read()
letters = re.findall(r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', text)

print ''.join(letters)
file.close()

     还真别说,默写时,才发现自己的代码还是出了点小问题,因为只要三个大写字母,所以第四个必须限定成不是大写字母的字符才行。另外,又复习了下括号()这个在python 正则表达式里的作用,表示 提取,从符合整个模式的串中只提取括号的那部分显示出来。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值