[Python] re 모듈 사용법
re 모듈은 앞선 포스팅 (https://heywantodo.tistory.com/78) 에서도 설명한 바와 같이
파이썬에서 제공하는 모듈로 정규표현식 패턴을 정의하고 이를 검색하는 여러 함수를 제공함
re 모듈은 다양한 함수를 제공하는데, 그 종류와 사용법에 대해 알아보자
re 함수
re 모듈에서 제공하는 대표적인 함수는 다음과 같음
먼저 re 함수를 사용하기 위해 모듈을 import 해주자
import re
re.compile(pattern)
주어진 정규 표현식 패턴을 컴파일하며 패턴 객체를 반환
패턴 객체는 정규 표현식 패턴을 미리 컴파일 한 것으로, 반복적인 패턴 검색에 사용할 수 있음
pattern = re.compile(r'\d{3}-\d{4}') # 세 자리 숫자-네 자리 숫자 패턴
result = pattern.search('전화번호는 010-1234-5678입니다.') # 문자열에서 패턴 검색
print(result.group()) # 매치된 문자열 출력
컴파일 된 객체는 예제와 같이 다른 re 함수와 함께 사용됨
re.search(pattern, string)
주어진 정규 표현식 패턴이 문자열 내에서 첫번째로 발견되는 경우에 대한 'Match' 객체를 반환
전체 문자열을 검색하며, 일치하는 첫 번째 패턴만 반환하고, 일치하는 패턴이 없을 경우 'None'을 반환
pattern = r'apple'
# 문자열에서 첫 번째로 발견되는 apple 검색
result = re.search(pattern, 'I have an apple and a banana.')
if result:
print('apple을 찾았습니다.')
else:
print('apple을 찾지 못했습니다.')
re.match(pattern, string)
주어진 정규 표현식 패턴이 문자열의 시작 부분에서 일치하는 경우에 대한 'Match' 객체를 반환
문자열의 시작 부분에서 일치하는 패턴을 찾으며, 일치하지 않는 경우에 'None'을 반환
pattern = r'apple'
# 문자열의 시작에서 apple 검색
result = re.match(pattern, 'I have an apple and a banana.')
if result:
print('apple로 시작하는 문자열을 찾았습니다.')
else:
print('apple로 시작하는 문자열을 찾지 못했습니다.')
re.findall(pattern, string)
주어진 정규 표현식 패턴과 일치하는 모든 문자열을 찾아 리스트로 반환
문자열 내에서 패턴에 일치하는 모든 부분을 찾으며, 각각을 리스트의 요소로 반환
pattern = r'\d+' # 연속된 숫자 패턴
# 문자열에서 모든 숫자 찾기
result = re.findall(pattern, 'I have 3 apples and 25 bananas.')
print(result) # 숫자 리스트 출력
re.finditer(pattern, string)
주어진 정규 표현식 패턴과 일치하는 모든 문자열에 대한 'Match' 객체를 반환하는 이터레이터를 생성
문자열 내에서 패턴에 일치하는 모든 부분을 찾음
pattern = r'\d+' # 연속된 숫자 패턴
# 문자열에서 모든 숫자 찾기
results = re.finditer(pattern, 'I have 3 apples and 25 bananas.')
for result in results:
print(result.group()) # 각 매치된 숫자 출력
re.split(pattern, string)
주어진 정규 표현식 패턴을 기준으로 문자열을 분할하여 리스트로 반환
패턴에 일치하는 부분을 구분자로 사용하여 문자열을 나눔
pattern = r'\s+' # 공백 패턴
result = re.split(pattern, 'Hello World Python') # 공백으로 문자열 분할
print(result) # 분할된 문자열 리스트 출력
re.sub(pattern, repl, string)
주어진 정규 표현식 패턴과 일치하는 문자열을 다른 문자열로 대체하여 반환
문자열 내에서 패턴에 일치하는 모든 부분을 찾아 다른 문자열로 대체
pattern = r'apple'
# apple을 orange로 대체
result = re.sub(pattern, 'orange', 'I have an apple and a banana.')
print(result) # 대체된 문자열 출력
re.subn(pattern, repl, string)
re.sub 함수와 동일한 기능을 수행하지만, 대체된 문자열과 대체가 이루어진 횟수를 함께 반환함
튜플로 (대체된 문자열, 대체 횟수)를 반환
import re
pattern = r'apple'
# apple을 orange로 대체하고 대체 횟수 반환
result, count = re.subn(pattern, 'orange', 'I have an apple and a banana.')
print(result) # 대체된 문자열 출력
print(count) # 대체 횟수 출력
Match 객체
위에서 계속 나오는 Match 객체에 대해서 더 자세히 알아보자
Match 객체는 re 모듈에서 정규 표현식 패턴과 문자열 사이에서 매치된 결과를 나타내는 객체임
Match 객체는 패턴 매칭 작업을 통해 얻어지며,
매치된 문자열에 대한 정보를 제공하고 다양한 메서드를 통해 접근 가능함
아래는 Match 객체의 주요 메서드와 속성
메서드 | 속성 |
group() | 매치된 문자열을 반환합니다. |
groups() | 매치된 모든 그룹에 대한 튜플을 반환합니다. |
groupdict() | 이름이 지정된 모든 그룹에 대한 매치된 문자열을 담은 딕셔너리를 반환합니다. |
start() | 매치된 문자열의 시작 위치를 반환합니다. |
end() | 매치된 문자열의 끝 위치를 반환합니다. |
span() | 매치된 문자열의 (시작, 끝) 위치를 튜플로 반환합니다. |
string | 매치된 문자열이 속한 원본 문자열을 반환합니다. |
re | 매치에 사용된 정규 표현식 패턴을 반환합니다. |
아래 예제와 같이 사용할 수 있음
import re
pattern = r'(\w+)\s(\w+)' # 이름과 성을 나타내는 그룹 패턴
text = 'John Doe'
match = re.match(pattern, text) # 문자열에 대한 패턴 매칭
if match:
print(match.group()) # 전체 매치된 문자열 출력
print(match.groups()) # 모든 그룹의 매치된 문자열 출력
print(match.group(1)) # 첫 번째 그룹 매치된 문자열 출력 (이름)
print(match.group(2)) # 두 번째 그룹 매치된 문자열 출력 (성)
print(match.groupdict()) # 이름이 지정된 모든 그룹의 매치된 문자열 출력
print(match.start()) # 매치된 문자열의 시작 위치 출력
print(match.end()) # 매치된 문자열의 끝 위치 출력
print(match.span()) # 매치된 문자열의 (시작, 끝) 위치 출력
print(match.string) # 원본 문자열 출력
print(match.re) # 사용된 정규 표현식 패턴 출력
'👩💻 Develope > Python' 카테고리의 다른 글
[Python] Datetime (0) | 2023.07.05 |
---|---|
[Python] 시간 지난 파일 자동 삭제 (0) | 2023.06.30 |
[Python] 예외 처리 (try, exept, else, finally) (0) | 2023.06.13 |
[Pandas] 데이터 프레임 컬럼 순서 바꾸기 (0) | 2023.05.27 |
[Pandas] 데이터 프레임에서 suffix를 prefix로 바꾸기 (0) | 2023.05.23 |