하나의 소문자 주위에 3개의 대문자가 있다고 합니다.

소스 코드에 주석으로 나와있는 다량의 문자열들 사이에서 해당 값을 찾아내면 되는 문제입니다.



이 문제는 정규표현식을 이용해서 해결할 수 있습니다.


예를 들어, AAAaAAA 이렇게 되어 있으면 가운데에 있는 a값이 찾고자 하는 문자입니다.

정규표현식으로 만들면 [A-Z]{3}[a-z]{1}[A-Z]{3} 이렇게 되는데 해당 방식대로 하면 많은 값들이 나오게 됩니다.

[A-Z]{3}을 앞뒤로 해도 그 앞뒤로 다시 대문자가 올 수 있기 때문입니다.


그래서 [a-z]{1}[A-Z]{3}[a-z]{1}[A-Z]{3}[a-z]{1} 앞뒤로 소문자를 하나씩 넣어주면 해결이 됩니다.


python에서 정규표현식을 사용하려면 re 모듈을 이용하면 됩니다.

1
2
3
4
5
6
7
import urllib.request
import re
 
html = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/equality.html").read().decode()
data = re.findall("<!--(.*?)-->", html, re.DOTALL)[-1]
 
print([ payload[4for payload in re.findall("[a-z]{1}[A-Z]{3}[a-z]{1}[A-Z]{3}[a-z]{1}",data) ])
cs


'Code Challenge > pythonchallenge.com' 카테고리의 다른 글

[pythonchallenge] level 4 linkedlist  (0) 2018.12.13
[pythonchallenge] level 2 ocr  (0) 2018.12.13
[pythonchallenge] level 1 map  (0) 2018.12.12
[pythonchallenge] level 0  (0) 2018.12.12

+ Recent posts