Python의 re 라이브러리는 정규 표현식을 사용하여 문자열을 검색하고 조작하는 강력한 도구입니다. 정규 표현식(정규식)은 특정한 규칙을 가진 문자열의 집합을 표현하는 형식 언어로, 복잡한 문자열 패턴을 간단하게 처리할 수 있습니다.
메타문자 | 설명 | 예시 |
---|---|---|
. | 임의의 한 문자 | a.b → acb , a1b , ... |
^ | 문자열의 시작 | ^ab → abc , abd , ... |
$ | 문자열의 끝 | ab$ → 1ab , 2ab , 3ab , ... |
* | 바로 앞 문자열 0회 이상 반복 | ab*c → ac , abc , abbc , abbbc , ... |
+ | 바로 앞 문자열 1회 이상 반복 | ab+c → abc , abbc , abbbc , ... |
? | 바로 앞 문자열 0회 또는 1회 | ab?c → ac , abc |
{n, m} | 바로 앞 문자열 n회부터 m회까지 반복 | a{1,3} → a , aa , aaa |
[ ] | 문자의 집합 또는 범위 | [a-z] → a , b , c , ... , x , y , z |
[^ ] | (부정) 괄호 안에 있는 것 제외 | [^a-z] → 소문자 a부터 z를 제외한 문자열 |
특수 시퀀스 | 설명 | 예시 |
---|---|---|
\d | 숫자 | (= [0-9]) \d{3} → 123 , 456 |
\D | 숫자가 아닌 문자 | (= [^0-9]) \D+ → abc, @#$ |
\w | 단어 문자 (알파벳, 숫자, 밑줄) | (= [a-zA-Z0-9_]) \w+ → abc , 123 , a_1 |
\W | 단어 문자가 아닌 문자 | (= [^a-zA-Z0-9_]) \W+ → @#! , " " |
\s | 공백 문자 | (공백, \t, \n) \s+ → " " , \t , \n |
\S | 공백 문자가 아닌 문자 | (= [^ \t\n\r\f\v]) \S+ →abc , 123 , a_1 |
re. search( <sub string> , <main string> )
import re # <sub string>이 <main string>에 있을 경우 A = re.search(r'abc', 'abcdef') print(A.start()) # 0 print(A.end()) # 3 print(A.group()) # 'abc' # <sub string>이 <main string>에 없을 경우 B = re.search(r'abc', 'ab') print(B) # None # <sub string>이 <main string>에 두 번 이상 있을 경우 ▶ 제일 첫 <sub string> 반환 C = re.search(r'abc', 'abcabc') print(C) # <re.Match object; span=(0, 3), match='abc'> # 두 자리 숫자 찾기 D = re.search(r'\d\d', 'a1ab12abc123') print(D) # <re.Match object; span=(4, 6), match='12'>
re.match( <sub string> , <main string> )
import re # <sub string>이 <main string>의 시작에 있을 경우 A = re.match(r'abc', 'abcdef') print(A.start()) # 0 print(A.end()) # 3 print(A.group()) # 'abc' # <sub string>이 <main string>의 시작에 없을 경우 B = re.match(r'abc', 'ab') print(B) # None # <sub string>이 <main string>의 시작에 두 번 이상 있을 경우 ▶ 제일 첫 <sub string> 반환 C = re.match(r'abc', 'abcabc') print(C) # <re.Match object; span=(0, 3), match='abc'> # 두 자리 숫자가 문자열의 시작에 있을 경우 D = re.match(r'\d\d', '12abc123') print(D) # <re.Match object; span=(0, 2), match='12'> # 두 자리 숫자가 문자열의 시작에 없을 경우 E = re.match(r'\d\d', 'a1ab12abc123') print(E) # None
re.compile( <pattern> , <flags=0> )
import re # 정규 표현식을 컴파일하여 패턴 객체 생성 pattern = re.compile(r'\d+') # 패턴 객체를 사용하여 매칭 작업 수행 result = pattern.search('The year is 2024') print(result.group()) # '2024'
re.fullmatch( <pattern> , <string> , <flags=0> )
import re # 문자열 전체가 패턴과 일치하는지 확인 result = re.fullmatch(r'\d+', '123456') print(result.group()) # '123456' # 문자열 전체가 패턴과 일치하지 않는 경우 result = re.fullmatch(r'\d+', '123abc') print(result) # None
re.split( <pattern> , <string> , <maxsplit=0> , <flags=0> )
import re # 패턴을 기준으로 문자열을 분할하여 리스트로 반환 result = re.split(r'\s+', 'This is a test string') print(result) # ['This', 'is', 'a', 'test', 'string'] # 최대 분할 횟수를 지정 result = re.split(r'\s+', 'This is a test string', maxsplit=2) print(result) # ['This', 'is', 'a test string']
re.findall( <pattern> , <string> , <flags=0> )
import re # 문자열에서 패턴과 일치하는 모든 부분을 찾아 리스트로 반환 result = re.findall(r'\d+', 'There are 123 apples and 456 oranges') print(result) # ['123', '456']
re.finditer( <pattern> , <string> , <flags=0> )
import re # 문자열에서 패턴과 일치하는 모든 부분을 찾아 반복 가능한 객체로 반환 matches = re.finditer(r'\d+', 'There are 123 apples and 456 oranges') for match in matches: print(match.group()) # '123', '456'
re.sub( <pattern> , <repl> , <string> , <count=0> , <flags=0> )
import re # 패턴과 일치하는 부분을 다른 문자열로 대체 result = re.sub(r'\d+', 'number', 'There are 123 apples and 456 oranges') print(result) # 'There are number apples and number oranges'
re.subn( <pattern> , <repl> , <string> , <count=0> , <flags=0> )
import re # 패턴과 일치하는 부분을 다른 문자열로 대체하며, 대체된 횟수도 함께 반환 result = re.subn(r'\d+', 'number', 'There are 123 apples and 456 oranges') print(result) # ('There are number apples and number oranges', 2)
re.escape( <string> )
import re # 문자열에서 특수 문자를 이스케이프 처리 escaped_string = re.escape('This is a test. [Special characters: *?+|]') print(escaped_string) # 'This\\ is\\ a\\ test\\.\\ \\[Special\\ characters\\:\\ \\*\\?\\+\\|\\]'