전방탐색
전방탐색은 긍정형과 부정형이 있다.
전방탐색 - 긍정형
이런 예제가 있다고 했을 때 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한 방식으로 가져오게 할 수 있다.
'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 |