Python/python_study

정규표현식 추가 공부(2021/1/14)

민철킹 2021. 1. 20. 22:44

정규표현식은 써도 써도 익숙해지지 않는다. 어려워..

추가로 조금 더 찾아보며 공부하였다.

 

---------------------------------------------------------------------------------------------------------------------------------

 

*문자 클래스 []
-[] 사이의 문자들과 매치
-[a-c] ==> [abc] 
-[0-5] ==> [012345]

*
\d - 숫자와 매치 == [0-9]
\D - 숫자가 아닌 것과 매치 == [^0-9]
\s - 공백과 매치
\S - 공백이 아닌 것과 매치
\w - 문자+숫자와 매치
\W - 문자+숫자가 아닌 문자와 매치

*Dot(.)
-줄 바꿈을 제외한 모든 문자와 매치
-ex) a.b
==> 'aab', 'a0b'는 a와 b사이에 문자가 있으므로 매치
==> 'abc'는 a와 b사이에 문자가 없으므로 매치 x

*반복(*)
-바로 앞문자가 0번 이상 반복
-ex) ca*t
==> 'ct'는 a가 0번 반복되어 매치, 'cat'는 'a'가 1번 반복되어 매치
       ,'caaat'는 a가 3번 반복되어 매치

*반복(+)
-바로 앞문자가 1번 이상 반복
==> 위의 예에서 ct는 매치 x

*반복({m, n},?)
-중괄호 안의 숫자만큼 반복되는 것만 매치
-ex) ca{2}t
==> 'caat'만 매치
-ex> ca{2,5}t
==> a가 2 이상 5 이하로 반복되는 것만 매치
?=={0,1}와 같은 표현
-ex) ab?c
==>'abc', 'ac' 매치

파이썬에서 정규표현식을 지원하는 re모듈
import re
p = re.compile('ab*')
p ==> 패턴객체

*패턴 객체 사용법 4가지
1.match
p= re.compile('[a-z]+')
m = p.match('python')
==> 하나라도 틀린 게 있으면 매치 객체에 none반환
만약 비교하는 문자열이 '3 python'이면 none반환
2.search
p= re.compile('[a-z]+')
m = p.search('python')

==> match와는 다르게 틀린 문자가 있어도 매치되는 문자열만 
      반환해줌

3.findall
m= p.findall('life is too short')

==> 일치하는 스트링을 리스트에 담아서 리턴해줌
       공백을 기준으로 끊어서 

4.finditer
m= p.finditer('life is too short')

==> 매치되는 문자열을 전부 match 객체 형태로 반복 가능한 객체 리턴해준다. for문사용 가능

 

*match 객체의 메서드1
-. group() ==> 매치된 문자열을 리턴한다.
-. start() ==> 매치된 문자열의 시작 위치를 리턴한다.
-. end() ==> 매치된 문자열의 끝 위치를 리턴한다.
-. span() ==> 매치된 문자열의 (시작, 끝)에 해당되는 튜플을 리턴한다.

 

*컴파일 옵션
1. DOTALL, S 

==>인자로 re.DOTALL or re.S를 주면 줄 바꿈이 있어도 매치

 

2. IGNORECASE, I
==>대소문자 구분 없이 매치

3. MULTILINE, M
==> 새로운 줄의 첫 번째도 처음으로 인식한다. ^와 같이 사용
      ^를 각 라인의 처음으로 인식시키는 옵션

4. VERBOSE, X
==>정규표현식 사이의 공백들을 다 없애줌

 

*백 슬래시 문제 
백 슬래시가 있는 어떤 표현식이 있을 때
r을 붙여서 로우 스트링으로 만들어줘야 함
ex) re.compile('\section') 을하면 \s를 공백으로 인식
  ==> re.compile(r'\\section')

 

*메타 문자 |(or)
re.compile('Crow|Servo')
==> 둘 중 하나라도 포함되어 있으면 매치

 

*메타문자 ^

re.search('^Life', 'Life is too short'))

==> Life가 맨 처음으로 시작하는 문자열과 매치

 

*메타 문자 $

re.search('short$', 'Life is too short'))

==> short가 맨 마지막에 있는 문자열과 매치

 

*메타 문자 \b
==> 공백을 의미

 

*그룹핑 ()

re.compile('ABC+') ==> C가 반복되는 것 매치
re.compile('(ABC)+') ==> ABC가 반복되는 것 매치
그룹에 이름을 지정해서 불러올 수도 있음.

*전방 탐색 : 긍정형(?=)
==> 검색조건에는 포함되지만 결과에는 포함 x
p = re.compile('.+:')
p.search('http://www~~~') ==> http:출력

p = re.compile('.+(?=:)')
p.search('http://www~~~') ==> http출력

*전방탐색 : 부정형(?!)


*문자열 바꾸기 sub

p = re.compile('(blue|white|red)')
p.sub('colors', 'blue socks and red shoes')
==> 출력: colors socks and colors shoes

 

 

반응형