Super Kawaii Cute Cat Kaoani

Python/Python Study

파이썬 정규 표현식 - 2

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

백슬래시 문제

\section을 썼을 때 문제가 발생한다. 

\s 는 공백을 표현하는 정규표현식이다.

그래서 \section이라고 쓰면 공백을 가지고 ection이라고 하는 문자를 찾기 때문에 이렇게 쓰면 안되고

 

p = re.compile('\\section') 이런식으로 백슬래시를 2개를 적어줘야 

제대로 된 백슬래시로 인식이 되서 \section을 찾아주게 된다.

 

그런데 또 문제가 있다.

' ' 사이에서 백슬래시 2개 \\는 백슬래시 1개 \로 치환이 된다.

 

진짜 백슬래시 2개를 넣으려면 백슬래시를 총 4개를 넣어야 하는 것이다.

p = re.compile('\\\\section') 

그래서 이건 너무 많으니까 이걸 좀 간소화하기 위해서 

rowstring이라고 해서 p = re.compile(r'\\section') 

즉,  r '      ' 이라고 쓰면 이걸 그냥 rowstring이라고 인식해서 백슬래시 문제를 해결해 줄 수 있다.

정리 : 백슬래시가 있는 어떤 표현식이 있을 때 r을 붙여서 로우스트링으로 백슬래스 두 개만 붙여서 공백이 아니다만 표현해주면 정상적으로 동작할 수 있다.

 

 

 

 

더 강력한 정규 표현식

기존에 메타문자 +[]* 이런것들 외에 추가적으로 보겠다.

메타문자 | 

출력 결과

| 는 프로그램에서 보통 or를 나타낼 때 사용한다.

CrowHello는 앞의 Crow와 일치하는게 있기 때문에 매치 객체를 리턴해준다.

 

compile한 다음에 compile에서 나온 패턴 객체를 이용해서 search를 사용했다.

 

 

메타문자 ^

근데 이걸 한번에 할 수도 있다.

^는 맨 처음에 Life가 나오는지, 즉 맨처음을 나타내는 표시이다.

출력 결과

'^Life' 로 컴파일 할 정규 표현식을 써준 다음에 찾을 문자열을 입력해주면 저렇게 한 줄에 바로 쓸 수 있다.

 

 

 

메타문자 $

맨 끝을 의미한다. 즉, short가 맨 끝에 위치하기 때문에 일치.

 

 

 

메타문자 \b

공백을 나타내는 메타문자이다.

역슬래시가 들어갔기 때문에 아까 배웠던 r (rowstring)이 들어갔다.

출력 결과

 

 

이런식으로 활용할 수 있는 메타문자는 엄청 많은데 이걸 다 배우기에는 너무 많고 

활용 방법은 동일하니까 필요할 때 구글링해서 사용한다!

 

 

 

그룹핑 - 1 (ABC)+

그냥 p = re.compile('ABC+')만 하면 C만 반복되는 것을 찾는다.

저렇게 그루핑을 해줘서 ABC를 찾을 수 있게 된다. 묶어주는게 그룹핑이다.

 

+ 추가적인 예제 1

매치 객체에서 따로 불러올수도 있다.

m.group(1)하면 그루핑 한것 중에 첫번째를 가져오는 것이다.

그룹핑 된 첫번째 그룹을 가져온 것.

 

 

+ 추가적인 예제 2

\1 이게 뭐냐면 그룹핑된 표현이 있을 때 (\b\w+) 이거의 결과를 \1에 써주는 것이다.

즉, 공백하고 어떤 단어가 있고 여기서 the라는게 걸렸다고 하면 여기 걸린게 한번 더 반복된다는 뜻이다.

즉, 이 그룹을 따로 정규표현식 내에서 사용하는 것이다.

 

 

+ 추가적인 예제 3

그룹핑된 문자열에 이름을 따로 붙일 수도 있다.

?P<원하는 이름> 이렇게 하면 이름을 붙여서 저걸 따로 불러올 수도 있다.

아까는 똑같은 예제에서 m.group(1)을 하면 첫번째 그룹을 불러왔는데 이런 그룹이 엄청 여러개 있다고 하면 

특정이름을 주게 되면 좀 더 불러오기가 편하다.

 

 

 

+ 추가적인 예제 4

특정 그룹에 이름을 붙여쓰면 word라는 그룹을 뒤쪽에서 불러올 수 있다.

아까 예제에서는 \1해서 첫번째 그룹을 불러와서 한번 더 쓸수있었는데

이제는 그룹을 주고 그룹이름을 넣어서 같은 결과를 얻을 수 있다.

 

728x90
반응형
LIST

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

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