python challenge 第三关

来源:互联网 发布:书生软件 百度百科 编辑:程序博客网 时间:2024/04/27 16:42

        网址: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 reimport urllib2file = 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 正则表达式里的作用,表示 提取,从符合整个模式的串中只提取括号的那部分显示出来。

   

原创粉丝点击