Super Kawaii Cute Cat Kaoani

Python/Python Study

파이썬 정규 표현식 - 3

zozni 2021. 1. 22. 19:12
728x90
반응형
SMALL

전방탐색

전방탐색은 긍정형과 부정형이 있다.

 

전방탐색 - 긍정형

이런 예제가 있다고 했을 때 http: 까지만 매칭을 하고 싶다.

그러면 정규 표현식에서 . 문자열이 반복되다가 : 을 만났을 때 여기까지가 매칭이 된다.

그렇다면 이번에는 http만 출력을 하고 싶어.

그러면 : 은 검색 조건에는 넣되, 결과에는 빠져야 한다. 이럴 때 긍정형 전방탐색을 사용한다. 

기호는 (?=) 을 사용한다.

= 뒤에 원하는 문자열을 넣어주면,

이렇게 출력 결과가 나오게 된다.

즉, 검색 조건에는 포함되나 결과에는 포함되지 않는 것이다.

 

 

 

 

전방탐색 - 부정형

부정형의 기호는 (?!) 이다. 

예를 들어 ".*[.](?!bat$).*$" 이런 식이 있다고 했을 때

이거는 어떤 문자열이 쭉 있고 . 이 있고 어떤 확장자가 있는데 $(맨뒤) 에 어떤 문자열이 있는

그리고 (?!bat$) 에는 어떤 확장자가 들어갈텐데 이 때 부정형 전방탐색을 쓰게 되면 

 -> bat가 맨뒤에 오는 것은 (?!) 포함되지 않게 라는 뜻이다!! wow

 

그래서 이걸 실행하면

이렇게 출력결과가 나오는 것이다.

 

여기에 exe도 나오지 않게 하는 조건이 추가된다면 or(|) 를 이용해서

이렇게 쓰면 autoexec.jpg 만 출력되게 되는 것이다.

 

 

 

 

 

 

문자열 바꾸기

정규 표현식을 이용해서 패턴을 만들어준 다음에 .sub 라는 메소들을 활용해서 

정규 표현식에 일치하는 것을 color로 바꿔줄 수 있다.

그룹안에 blue 또는 while 또는 red가 들어가면 매칭이 되도록 만들었다.

그러면 저 뒤에 있는 문장중에 정규표현식에 일치하는 문장이 나오면 이걸 color로 바꿔라. 라는 표현이다.

 

출력이 이렇게 나와야 하는데 ㅠㅠ 나는 안뜨네

 

 

 

Greedy 와 Non-Greedy 의 정규 표현식에서의 활용

태그들이 쭉 들어가 있는 string이 있다.

<.*> 꺽새 사이에 문자열이 들어가게 해서 이거와 일치하는 것을 출력하도록 해보자.

그러면 단순하게 생각했을 때 꺽새 사이에 있는 문자열이 있는거니까 <html>을 가져온다고 생각하는데

막상 출력해보면 위와 같은 결과가 나온다. < ><> < > 꺽새 사이에 있는 걸 다가지고옴. -> greedy

 

이런 걸 막으려면 ? 메타문자를 이용하게 되면 <.*?> 이런 패턴이 있을 때 이걸 최소한으로 반복하겠다는 의미이다.

최소한이니까 <html> 꺽새 열고 바로 닫힘. -> Non-greedy

반복되는 메타문자 뒤쪽에 물음표를 써주게 되면 non-greedy한 방식으로 가져오게 할 수 있다.

728x90
반응형
LIST

'Python > Python Study' 카테고리의 다른 글

파이썬 정규 표현식 - 2  (1) 2021.01.19
파이썬 정규 표현식 - 1  (0) 2021.01.17
파이썬 프로그램 - 6  (0) 2021.01.17
파이썬 프로그램 - 5  (0) 2021.01.17
파이썬 프로그램 - 4  (0) 2021.01.16