1편 : 2022.08.11 - [코딩/Python] - [Python/파이썬] 문자열 처리 정규 표현식(regular expression) - 1
2편 : 2022.09.03 - [코딩/Python] - [Python/파이썬] 문자열 처리 정규 표현식(regular expression) - 2 : 실제 예시를 통한 이해
최근 회사 업무로 C 코드를 파이썬으로 파싱하는 작업을 하고 있는데 복잡한 문자열에 대해 처리가 필요하여 정리하는 글. 정규표현식이란 복잡한 문자열을 처리하기 위해 사용되는 식으로 파이썬뿐만아니라 문자열 처리가 가능한 Perl 등의 다른 프로그래밍 언어에서도 사용할 수 있다.
파이썬에서는 re(regular expression)라는 정규 표현식을 지원하는 내장 모듈이 있다. 앞으로의 정규표현식 공부 내용은 해당 모듈을 사용하여 정리 예정이다. 아래 내용은 위키독스의 점프투파이썬 책을 참고하였다.
1. re 모듈 기본 사용법
<코드>
import re
#컴파일 된 패턴 객체 생성(찾을 문자 규칙)
p = re.compile("abc")
#"abc"가 패턴객체 p에 match되는지 확인
m = p.match("abc")
#결과 출력
print(m)
<결과>
<re.Match object; span=(0, 3), match='abc'>
- p는 패턴(pattern) 객체를 의미한다. 간단히 말해서 찾을 문자 규칙을 의미한다.
- m은 매치(match) 객체를 의미한다. p.match("abc")는 "abc"문자가 p 패턴에 일치하느냐를 의미한다.
- 따라서, m을 출력하면 re.Match object가 반환된다.
- 만약, match가 안될지 아래와 같이 None 이 출력된다.
- 참고로 match 함수는 문자열 처음부터 정규식 규칙과 부합되는지 확인하는 함수임.
(비슷한 함수로 search가 있는데 2번에서 설명)
<코드>
#컴파일 된 패턴 객체 생성(찾을 문자 규칙)
p = re.compile("abc")
#"cba"가 패턴객체 p에 match되는지 확인
m = p.match("cba")
<결과>
None
2. 문자열 규칙 기초(메타문자)
문자열 규칙을 설명하기 전에 먼저 search와 match의 차이점에 대해 정리
1) search vs match
- match : 첫글자 기준으로 일치하는지 확인. 아래 코드에서 숫자2는 첫글자에 없으므로 None 출력 됨.
<코드>
#컴파일 된 패턴 객체 생성(찾을 문자 규칙)
p = re.compile("2")
m = p.match("abcd-2-abcd")
<결과>
None
- search : 문자열 전체에서 일치하는지(포함여부) 확인. 아래 문자열에 2가 포함되므로 위치를 반환한다.
<코드>
#컴파일 된 패턴 객체 생성(찾을 문자 규칙)
p = re.compile("2")
m = p.search("abcd-2-abcd")
<결과>
<re.Match object; span=(5, 6), match='2'>
2) [ ] 문자 클래스
- 아래 문자 조합에 따라 정규표현식에서는 다양한 문자 규칙을 만들어낼 수 있다.
. ^ $ * + ? { } [ ] \ | ( )
- [a-z] : 소문자만
[a-zA-Z] : 영어 모두(알파벳 소문자, 대문자)
[0-9] : 숫자만
- 앞에 ^를 붙일 경우 not 의 의미가 된다. [^a-z], [^a-zA-Z] ....
ex1) 임의의 문자열에서 소문자를 포함하는지 검출
<코드>
#컴파일 된 패턴 객체 생성(찾을 문자 규칙)
p = re.compile("[a-z]")
m = p.search("124-123a")
<결과>
<re.Match object; span=(7, 8), match='a'>
ex2) 숫자를 포함하지 않는 문자만 리스트로 반환
-. findall 함수는 정규식에 매치되는 각 문자를 리스트로 반환한다
<코드>
#컴파일 된 패턴 객체 생성(찾을 문자 규칙)
p = re.compile("[^0-9]")
m = p.findall("as132df-g12gg")
<결과>
['a', 's', 'd', 'f', '-', 'g', 'g', 'g']
[ ] 문자 클래스에서 자주 사용하는 규칙은 아래와 같이 특정 표기법으로 대체할 수 있다.
표기법 | 설명 |
\d | [0-9]와 동일 표현 |
\D | [^0-9]와 동일 표현 |
\s | 공백 문자와 매치 |
\S | 공백 문자가 아닌 경우 매치 |
\w | 문자+숫자와 매치 |
\W | 특수문자만 매치(문자+숫자가 아닌) |
위 내용 중 \w(문자,숫자만)를 예시로 코드를 작성해보자.
<코드>
#컴파일 된 패턴 객체 생성(찾을 문자 규칙)
p = re.compile("\w")
m = p.findall("ybworld.tistory.com// 블로그명 : 투손플레이스")
<결과>
['y', 'b', 'w', 'o', 'r', 'l', 'd', 't', 'i', 's', 't', 'o', 'r', 'y', 'c', 'o', 'm', '블', '로', '그', '명', '투', '손', '플', '레', '이', '스']
- 위에서 \w은 [a-zA-Z0-9가-힣]과 동일하다. 가-힣은 문자열에 한글이 포함되는지 확인한다.
'코딩 > Python' 카테고리의 다른 글
[Python/파이썬]문자열 처리 정규 표현식(regular expression) - 3 : 긍정형 전방탐색, 긍정형 후방탐색 (0) | 2022.10.25 |
---|---|
[Python/파이썬] 문자열 처리 정규 표현식(regular expression) - 2 : 실제 예시를 통한 이해 (0) | 2022.09.03 |
[Python/파이썬] xlwings RunPython 파일 경로 수정하기(다른 경로 파이썬 파일 import 하기) (0) | 2022.03.18 |
[Python/파이썬] json 모듈 사용법 (2) | 2021.09.05 |
[Python/파이썬] Generator(제너레이터) , Iterator(이터레이터) (0) | 2021.08.23 |