这个是 Python Challenge 的 Level 3。
这个图有一点点提示,关键仍然是图下面的一行字:
代码语言:javascript复制One small letter, surrounded by EXACTLY three big bodyguards on each of its sides.
网页上也没有给出其他提示,这句话的直接翻译就是:一个小写字母,两边各站着三个大个保镖。
有了上个Level的提示,我们去查阅下网页源代码,啊哈,有一大堆提示。
代码语言:javascript复制<html><head>
<title>re</title></head><body><!--
kAewtloYgcFQaJNhHVGxXDiQmzjfcpYbzxlWrVcqsmUbCunkfxZWDZjUZMiGqhRRiUvGmYmvnJIHEmbT
MUKLECKdCthezSYBpIElRnZugFAxDRtQPpyeCBgBfaRVvvguRXLvkAdLOeCKxsDUvBBCwdpMMWmuELeG
ENihrpCLhujoBqPRDPvfzcwadMMMbkmkzCCzoTPfbRlzBqMblmxTxNniNoCufprWXxgHZpldkoLCrHJq
vYuyJFCZtqXLhWiYzOXeglkzhVJIWmeUySGuFVmLTCyMshQtvZpPwuIbOHNoBauwvuJYCmqznOBgByPw
TDQheAbsaMLjTmAOKmNsLziVMenFxQdATQIjItwtyCHyeMwQTNx...
-->
这里有两个提示,标题是re,这不是正则表达式是啥? 再看下面的是一大堆的字母,结合图片的提示,应该是要找到”AAAaAAA”这样的字符串,其中AAA表示大保镖(大写字母),中间一个是小写字母。
有了上一个Level的积累,代码很容易:
代码语言:javascript复制# coding=utf-8# equalityimport re
string = "kAewtloYgcFQaJNhHVGxXDiQm..." # 太长了,文章贴不下,略去print(''.join([x[4] for x in re.findall('[^A-Z][A-Z]{3}[a-z][A-Z]{3}[^A-Z]', string)]))
运行结果:
代码语言:javascript复制linkedlist
[Finished in 0.4s]
最佳答案1,2,3:
代码语言:javascript复制print("".join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', string)))
print("".join(x[1] for x in re.findall('(^|[^A-Z])[A-Z]{3}([a-z])[A-Z]{3}([^A-Z]|$)', string)))
print("".join(re.findall("(?<=[^A-Z][A-Z]{3})[a-z](?=[A-Z]{3}[^A-Z])", string)))
点评:
- 都很好