«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

공부를 합니다.

[공부] 파씽! 또는 parsing 에 관한 모든 것 본문

공부

[공부] 파씽! 또는 parsing 에 관한 모든 것

sher1ock. 2017. 1. 16. 00:34

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
Comments