공부를 합니다.
[공부] 파씽! 또는 parsing 에 관한 모든 것 본문
parsing, 또는 파싱. 에대한 모든것 이지만 나도 잘 모른다. ㅎ
하지만 포너블, 미스크 등 다양한 분야에서 요구하는 기본적인 능력이므로 차근차근 정리해보려고 한다.
파싱이란 문장 단위의 문자열을 토큰으로 재구성하는 것이다.
다양한 언어로 파싱을 할 수 가 있는데 난 처음부터 python으로 시작을 해서
파이썬으로 파싱을 하면서 알게된점, 기록하고 싶은것들... 이다!
우선 내가 파이썬 공부를 하면서 처음 접했던 "잘라낸다" 의 의미를 가진것이
슬라이싱기법, slicing 이다.
예를 들어보면
>>> s = 'do not believe me'
라고 저장 했을때
>>> s[0:2]
이러면 'do' 가 출력이 된다.
여기서 알아야 할거은 파이썬은 숫자를 0부터 세고 슬라이싱할때 마지막 숫자는 포함이 안된다는 점이다.
즉 s[0:1]을 해버리면 'do'가 아닌 'd'가 출력이 된다.
그렇다면 believe me 를 출력하고 싶으면?
s[7:17] 를 해버리면 된다. 또는 s[7: ] 를 해버리면 된다.
>>> s[시작 번호 : ~까지 번호]
끝나는 부분을 설정 안해준다면 시작하는대서부터 끝까지 출력을 한다.
시작 번호를 설정 안해준다면 처음부터 끝번호까지 출력을 한다.
그리고 알게된 기법이
스플릿, split.
슬라이싱기법과 흡사한대 스플릿은 내가 지정한 '문자열' 기준으로 나누어 준다.
>>> s = 'do not believe me'
>>> s.split(' ')
이러면 저장된 s 문자열을 공백 기준(' ')으로 나누겠다. 라는 말이다.
출력은
['do', 'not', believe', 'me']
이렇게 공백 기준으로 끊어서 출력을 해준다.
이제 슬라이싱 + 스플릿 을 해보면
>>> s.split(' ')[2]
를 하게되면 공백 기준으로 나누되 3번째 토큰을 출력해라. 가 된다
'believe'
이 두가지만 가지고 기본적인 파싱문제를 코딩할 수 있게된다.
이제 filter, 필터 라는 내장함수이다.
말 그대로 걸러주는 함수이다.
내가 저장한 필터대로 필터가 되는...?? 그런 강력크한 함수다.
filter(함수, 리스트) 이렇게 사용한다.
나는 처음에 접할때 필터와 람다(lambda) 함수를 같이써서 필터함수만을 사용을 어떻게 하는지 아직 잘 모르겠다.
그렇다면 lambda 란?
lambda 인자 : 표현식.......
처음에 이렇게 이론적으로 접했을때는 이것을 어떻게 어떤식으로 사용을 해야하는지 잘 모르겠는데
간단한 예를 접하면 조금씩 감이 잡힌다.
>>> filter(lambda x : x <5, range(10))
[0, 1, 2, 3, 4]
filter(함수, 리스트) 안에 lambda 인자 : 표현식
이 합쳐신 표현이다.
범위가 10인 리스트 안에서 람다라는 함수를 사용했는데 람다는 5미만을 정의하고
filter가 그것을 수행한다.
>>> 즉, 범위가 10 인 리스트 안에서 5미만만 걸러서 나타낸다.
그리고 map 이라는 내장함수.
매핑 이라고 흔히 합쳐주는? 것을 의미하는 것 같다.
map(함수, 리스트) 형식으로 사용한다.
이 또한 map 단독으로는 어떻게 쓰는지 모른다;
다른 함수와 같이 사용하는 예를 들어보겠다.
투 비 컨티뉴......
'공부' 카테고리의 다른 글
[2016 securityfest] flagship (0) | 2016.11.18 |
---|---|
[2016 tmctf] simple_bof (0) | 2016.11.18 |
[pwnable.kr] [bof] bof sol (0) | 2016.11.18 |
[공부] [메모] 문제들을 풀면서 익힌 것들 (0) | 2016.11.17 |
[poxx2016] boffee_write up (0) | 2016.10.29 |