關卡地址:http://www.pythonchallenge.com/pc/def/equality.html
關卡是尋找兩邊都被三個大字母包圍的小字母。
代碼能夠參考上一小節的。
代碼以下:html
# -*- coding: UTF-8 -*- import urllib.request import re import string url = urllib.request.urlopen('http://www.pythonchallenge.com/pc/def/equality.html') page = url.read().decode('utf8') # 在Python中urlopen返回的response是byte類,須要轉成string類 pattern = re.compile(r'<!--[^>]*?-->') # 註釋是在<!-- 和-->,這裏使用?是想最短匹配,不過好像不加也沒有影響 m = re.findall(pattern, page) #print(m) pattern = re.compile(r'(?<=[a-z][A-Z]{3})([a-z])(?=[A-Z]{3}[a-z])') print(''.join(re.findall(pattern, ''.join(m))))
這段代碼主要是考察re正則表達式的使用,其中(?<=...)是前綴匹配,可是不捕獲,(?=...)是後綴匹配,也是不捕獲。
最後一段輸出代碼,有不少括號,不可取,這主要是因爲re.findall返回的序列[],要用''.join()來轉換成string輸出,或許有更好的方式來實現。python