StevenPZChan
StevenPZChan
~1 min read

Categories

Tags

继续挑战


第3题地址equality.html

  • bodyguard.jpg
  • 网页标题是re
  • 题目是One small letter, surrounded by EXACTLY three big bodyguards on each of its sides,意思是每边正好有3个保镖的小写字母

结合图片看这个题目挺有意思,中间是一根小蜡烛,两边各有三根大蜡烛
惯例先打开网页源码view-source,果然又有一长串乱码:

kAewtloYgcFQaJNhHVGxXDiQmzjfcpYbzxlWrVcqsmUbCunkfxZWDZjUZMiGqhRRiUvGmYmvnJIHEmbT
MUKLECKdCt…

这回貌似只有字母了,我们先将它取出来:

import re
import requests
response = requests.get('http://www.pythonchallenge.com/pc/def/equality.html').text
messy_str = re.findall(r'<!--(.*?)-->', response, re.DOTALL)[0]

通过分析网页的提示,应该是让我们找出两边正好有三个大写字母的小写字母
结合网页标题re,很好想到用正则就很容易:

small_letters = re.findall(r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', messy_str)
print(''.join(small_letters))
linkedlist

注意是正好,所以两边还要匹配一个非大写字母(还要用[^A-Z]而不是[a-z],因为后者匹配不到行首和行尾)。
把结果输入到地址栏linkedlist.html得到

linkedlist.php

再将地址改成linkedlist.php,果然是下一题!

总结:这一题也很简单,前提是正则玩得溜。事实上,遍历取出连续9个字符做判断也是可行的,就是代码繁琐一点。

本题代码地址3_equality.ipynb