정규 표현 다루기(python)
참고자료
파이썬 라이브러리 레시피 파이썬 공식문서
(https://support.google.com/a/answer/1371415?hl=ko)
plas님의 블로그
ednadev님의 블로그
정규 표현
패턴을 정의해서, 해당 패턴에 맞는 문자열을 찾거나 치환하는 등의 작업을 의미한다.
메타 문자
| 문자 | 설명 |
|---|---|
| ^ | 텍스트의 행 또는 문자열의 시작부분 |
| $ | 텍스트의 행 또는 문자열의 끝부분 |
| r | 백슬래시 문자를 해석하지 않고 구성된 문자열 그대로를 의미 |
| . | 새로운 행을 제외하고 모든 단일 문자를 매칭 |
| \ | 다음 문자가 특수 문자가 아닌 문자 그대로의 의미 |
| \w | 문자, 숫자 또는 밑줄(a-z, A-Z, 0-9, _)을 매칭 |
| \W | 문자, 숫자 또는 밑줄이 아닌 문자를 매칭 |
| \s | 공백 문자를 매칭 |
| \S | 공백 이외의 문자를 매칭 |
| \d | 0-9 사이의 숫자를 매칭 |
| \D | 0-9 사이의 숫자 외의 문자를 매칭합니다. |
선택 패턴
| 문자 | 설명 |
|---|---|
| | | “또는”을 의미 |
| […] | 대괄호속에 넣은 문자들 중에서 하나에 매칭 |
| [^…] | 대괄호속에 넣은 문자들 제외해서 매칭 |
그룹
| 문자 | 설명 |
|---|---|
| () | 매칭 결과를 각 그룹별로 분리 가능 |
수량 한정자
앞에 문자에 대해 반복을 몇번 할 것인가, 또는 얼마나 허용할 것인가에 관한 규칙을 표현
| 문자 | 설명 |
|---|---|
X? | X가 0번 또는 한번 |
X+ | X가 한번 이상 |
X* | X가 0번 이상 |
X{n} | X가 정확히 n번 반복 |
X{n, m} | X가 n번 이상, m번 이하 |
함수
- re.compile(
pattern,flags=0)- 정규 표현을 컴파일하여 정규 표현 객체를 반환
(정규표현을 객체로 바꿔서 사용) pattern: 정규 표현을 정의flags: 특수한 동작을 설정(대소문자를 구별하지 않는다 등)
- 정규 표현을 컴파일하여 정규 표현 객체를 반환
- re.seacrh(
pattern,string,flags=0)- 정규 표현이 문자열에 일치하는지 확인
pattern: 정규 표현을 정의string: 확인할 문자열flags: 특수한 동작을 설정(대소문자를 구별하지 않는다 등)
- re.match(
pattern,string,flags=0)- 정규 표현이 문자열에 일치하는지 확인. 단, 맨 앞글자부터 일치하는지 확인
pattern: 정규 표현을 정의string: 확인할 문자열flags: 특수한 동작을 설정
- re.fullmatch(
pattern,string,flags=0)- 정규 표현이 문자열 전체와 일치하는지 확인
pattern: 정규 표현을 정의string: 확인할 문자열flags: 특수한 동작을 설정
- re.split(
pattern,string,maxsplit=0,flags=0)- 문자열을 정규 표현에 일치하는 문장열로 분할. 반환은 list
pattern: 정규 표현을 정의string: 확인할 문자열maxsplit: 분할할 최대 개수flags: 특수한 동작을 설정
- re.findall(
pattern,stringflags=0)- 문자열 안의 정규 표현에 일치한 문자열을 리스트로 반환
pattern: 정규 표현을 정의string: 확인할 문자열flags: 특수한 동작을 설정
- re.finditer(
pattern,string,flags=0)- 문자열 안의 정규 표현에 일치한 객체를 반복자(iterator)로 반환
(일치하는 문자열의 시작, 끝 index를 파악할 때 쓰임) pattern: 정규 표현을 정의string: 확인할 문자열flags: 특수한 동작을 설정
- 문자열 안의 정규 표현에 일치한 객체를 반복자(iterator)로 반환
- re.sub(
pattern,repl,string,count=0,flags=0)pattern: 정규 표현을 정의repl: 정규 표현에 일치한 문자열을 repl로 치환string: 확인할 문자열count=0: 바꿀 횟수flags: 특수한 동작을 설정
예제
- r
a = 'abcdef\n'
b = r'abcdef\n'
print(a)
print(b)
결과
abcdef
abcdef\n
- re.compile()
prog = re.compile(r"app\w")
prog.findall("application orange apple banana")
결과
[“application”, “apple”]
- ()
g = re.search(r"(\w+)@(.+)", "test@gmail.com")
print(g.group(0))
print(g.group(1))
print(g.group(2))
- re.split()
패턴을 구분자로 문자열을 나눠줌
a = re.split("[:., ]+", "apple orange:banana,tomato")
print(a)
결과
[‘apple’, ‘orange’, ‘banana’, ‘tomato’]
패턴을 구분자로 문자열을 나눠줌 (단, 구분자도 배열에 추가함)
a = re.split("([:., ])+", "apple orange:banana,tomato")
print(a)
결과
[‘apple’, ‘ ‘, ‘orange’, ‘:’, ‘banana’, ‘,’, ‘tomato’]
- re.sub() 패턴에 맞는 것을 치환해준다.
a = re.sub('apple|orange', 'fruit', 'apple box orange tree') # apple 또는 orange를 fruit로 바꿈
print(a)
결과
‘fruit box fruit tree’