관심 1/Python
파이썬 정규표현식
give_me_true
2023. 7. 10. 00:06
정규 표현식
\d : 숫자
\w : 숫자, 문자
\s : whitespace [ \t\n\r\f\v]
\D, \W, \S 는 반대
. : \n 제외 모든 문자
* : 앞 문자가 0~무한 반복
+ : 앞 문자가 1번 이상 반복
? : 0번 또는 1번. {0,1} 랑 동일
반복 횟수 정하기
- {m,n} : m 이상 n 이하 반복. m, n 은 생략 가능
- {2,} : 두번 이상
- {,2} : 두번 이하
- {2} : 두번
파이썬 정규 표현식
import re
p = re.compile('bc*') # bc* 를 컴파일해서 컴파일 된 패턴 객체를 리턴 함
# 패턴이란 정규식을 컴파일 한 결과
컴파일 된 패턴 객체
- match() : 문자열의 처음부터 매치되는지 확인
- search() : 문자열 전체 확인
- findall() : 매치되는 모든 문자열을 리스트로 반환
- finditer() : 매치되는 모든 문자열을 반복 가능한 객체로 리턴
import re
p = re.compile('[a-z]+')
# match : 문자열의 처음부터 매치되는지 확인
m = p.match("hello") # 결과는 match 객체 또는 None
# search : 문자열 전체 확인
s = p.search("hi hello")
# findall : 모든 값을 찾아 리스트로 반환
f = p.findall("hi hello world") # 결과는 리스트
# finditer : 결과를 iterator object 로 반환
f = p.finditer("hi hello world")
match 객체
- group : 매치 문자열 반환
- start : 시작 위치
- end : 끝 위치
- span : (시작, 끝) 튜플 반환
m.group() # 'hello'
모듈 단위
p = re.compile('[a-z]+')
m = p.match('hello') # 객체를 여러번 사용할 때 이렇게 수행
축약 단위
m = re.match(['a-z]+', 'hello')
컴파일 옵션
- DOTALL, S : 줄바꿈 문자 포함
- IGNORECASE, I : 대소문자 구분 안함
- MULTILINE, M : 여러 줄 매치, ^랑 $와 함께 사용
- VERBOSE, X : 정규식을 보기 편하게
p = re.compile('[a-z]+, re.DOTALL)
p = re.compile('[a-z]+, re.S)
역슬래시
p = re.compile('\\hello') # \hello
p = re.compile(r'\\hello') # \\hello
| : or. A|B 는 A 또는 B랑 매치되는 것
^ : 문자열 맨 처음과 일치
$ : 문자열 마지막과 일치
\A : 줄과 상관 없이 문자열의 맨 처음과 일치. re.MULTILINE 에 유의
\Z : 줄 상관 없이 문자열 마지막과 일치
\b : 단어 구분자. word boundry 로 whitespace 로 구분. \B 는 반대
그루핑
- (ABCD)+ 로 세트로 사용 가능
- 단어의 경우 \w+ 를 (\w+) 로 설정한 다음 첫번째 그룹이랑 매치되면 group(1) 로 사용
- group(0) 은 전체
- 재참조는 \1 로 사용 가능하며 첫번째 그룹
- 그룹에 이름 짓기 : (?<name>..) 로 사용. 재참조 시에는 (?P=name)
- 사용은 (\w+) 를 (?P<name>\w+)
전방 탐색
- 긍정형 전방 탐색 : (?=...) → ... 는 검색에 사용되지만 결과에는 포함 안됨
- 부정형 전방 탐색 : (?!...) → ... 조건은 결과에서 제외함
문자열 바꾸기
- sub 메서드 사용.
- p.sub('바꿀문자열', '대상문자열', count=1)
- 참조로 바꿀 수 있음
- p.sub("\g<name1> \g<name2>", "대상문자열")
ref. https://docs.python.org/3/library/re.html
ref. https://wikidocs.net/4308
ref. https://wikidocs.net/4309