백슬래시 문제
\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해서 첫번째 그룹을 불러와서 한번 더 쓸수있었는데
이제는 그룹을 주고 그룹이름을 넣어서 같은 결과를 얻을 수 있다.
'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 |