정규식이라고도 불리는 정규 표현식 (Regular Expressions)은 복잡한 문자열을 처리할 때 사용하는 코딩 기법입니다. 난이도가 있는 주제입니다. 저와 같은 코딩 초보자에게 도움이 되는 쉽고 핵심적인 내용만 정리해보겠습니다.
핵심 요약
1. 정규식은 원하는 형태로 괄호안에 들어가며 re.compile을 하고 보통 p라는 변수로 받습니다.
p = re.compile("원하는 형태")
2. 괄호안의 "원하는 형태"는 정규식 내용을 의미합니다. '.', '^', '$' 등의 메타 문자를 포함합니다.
- . : 하나의 문자를 의미합니다. 예를 들어 a.b의 정규식이라면 a와 b 사이에 어떤 문자가 들어가도 매치됩니다.
- ^ : 문자열의 시작을 의미합니다. 예를 들어 ^ca의 정규식이라면 cat, car, category 등이 매치됩니다.
- $ : 문자열의 끝을 의미합니다. 예를 들어 st$의 정규식이라면 test, easiest, biggest 등이 매치됩니다.
3. p.match("비교할 문자열")은 우선 괄호 안에는 비교할 문자를 입력해줍니다. 앞의 코드 p와 매치되는지 비교하여 결과를 m이라는 변수에 반환합니다. 주어진 문자열을 원하는 형태와 처음부터 일치하는지를 확인합니다. p.search("비교할 문자열")은 주어진 문자열 중에 원하는 형태와 일치하는 게 있는지 확인합니다. p.findall("비교할 문자열")은 주어진 문자열 중에 일치하는 모든 문자열을 리스트 형태로 lst 변수에 반환합니다.
m = p.match("비교할 문자열")
m = p.search("비교할 문자열")
lst = p.findall("비교할 문자열")
예제 코드 #1 - p.match()
아주 초보적인 예제 코드입니다. 우선 re 패키지를 임포트 합니다. "app.e"라는 정규식을 컴파일한 후 p라는 변수에 넣어줍니다. 다음은 apple이라는 비교할 문자열을 p.match라는 함수를 사용하여 비교합니다. 비교한 결과는 m이라는 변수에 넣어줍니다. group()이라는 함수는 매치 결과가 문제없으면 비교 대상의 문자를 그대로 출력해주고 오류가 있으면 에러를 발생시킵니다.
import re
p = re.compile("app.e")
m = p.match("apple")
print(m.group())
실행결과 : apple이라는 단어는 "app.e"라는 정규식과 부합하므로 apple이라는 결과를 출력하였습니다.
apple
예제 코드 #2 - p.search()
다음 예제 코드입니다. 먼저 print_match라는 함수를 만들어 보았습니다. "I like an apple"이라는 문자열을 p.search에 입력하여 정규식과 비교를 해봅니다. group()은 일치하는 문자열을 반환합니다. string은 입력받은 문자열을 반환합니다. start()는 일치하는 문자열의 시작 index를 반환합니다. end()는 일치하는 문자열의 마지막 index를 반환합니다. span()은 일치하는 문자열의 시작과 끝 index를 반환합니다.
import re
p = re.compile("app.e")
def print_match(m):
if m:
print("m.group():", m.group())
print("m.string:", m.string)
print("m.start():", m.start())
print("m.end():", m.end())
print("m.span():", m.span())
else:
print("매칭되지 않음")
m = p.search("I like an apple")
print_match(m)
실행결과 : search는 주어진 문자열 중에 원하는 형태와 일치하는 게 있는지 확인합니다. 정규식과 부합하는 apple이 "I like an apple" 중에 있으므로 apple이라는 결과를 출력하였습니다.
m.group(): apple
m.string: I like an apple
m.start(): 10
m.end(): 15
m.span(): (10, 15)
예제 코드 #3 - p.findall()
다음 예제 코드입니다. "I like you in my life"이라는 문자열을 p.findall에 입력하여 정규식과 비교를 해봅니다. findall()은 문자열에서 정규식과 일치하는 모든 문자열을 리스트 형태로 반환합니다.
import re
p = re.compile("li.e")
lst = p.findall("I like you in my life")
print(lst)
실행결과 : 정규식과 부합하는 문자열은 like와 life 두 개 있고 이를 리스트 형태로 반환하였습니다.
['like', 'life']
'데이터 분석 및 업무 자동화' 카테고리의 다른 글
POWER BI 입문 추천 책 리뷰 <데이터 시각화와 탐색 WITH POWER BI> (1) | 2022.03.12 |
---|---|
2회독 후 남기는 점프 투 파이썬 후기 <Do it! 점프 투 파이썬> (0) | 2022.03.11 |
SQLD 자격증 살펴 보기, 나도 할 수 있다! (0) | 2022.02.24 |
태블로(TABLEAU) 소개, 최고의 데이터시각화 툴 (0) | 2022.02.23 |
MySQL 규칙 만들기 방법 - IF, CASE, CREATE FUNCTION (0) | 2022.02.21 |
댓글