re — 간단한 정규 표현식¶
이 모듈은 정규 표현식 연산을 구현합니다. 지원되는 정규 표현식 구문은 CPython re 모듈의 부분 집합입니다(그리고 실제로는 POSIX 확장 정규 표현식의 부분 집합입니다).
지원되는 연산자와 특수 시퀀스는 다음과 같습니다:
.임의의 문자와 일치합니다.
[...]문자 집합과 일치합니다. 개별 문자와 범위가 지원되며, 부정 집합(예:
[^a-c])도 포함됩니다.^문자열의 시작과 일치합니다.
$문자열의 끝과 일치합니다.
?이전 하위 패턴의 0개 또는 1개와 일치합니다.
*이전 하위 패턴의 0개 이상과 일치합니다.
+이전 하위 패턴의 1개 이상과 일치합니다.
???의 비탐욕적 버전으로, 0개를 우선하면서 0개 또는 1개와 일치합니다.*?*의 비탐욕적 버전으로, 가장 짧은 일치를 우선하면서 0개 이상과 일치합니다.+?+의 비탐욕적 버전으로, 가장 짧은 일치를 우선하면서 1개 이상과 일치합니다.|이 연산자의 왼쪽 또는 오른쪽 하위 패턴 중 하나와 일치합니다.
(...)그룹화. 각 그룹은 캡처를 수행합니다(캡처한 부분 문자열은
match.group()메서드로 접근할 수 있습니다).(?:...)비캡처 그룹화. 각 그룹은 일반 그룹화와 동일한 규칙으로 일치되지만, 일치 객체의 일부가 되지는 않습니다.
\d숫자와 일치합니다.
[0-9]와 동일합니다.\D숫자가 아닌 문자와 일치합니다.
[^0-9]와 동일합니다.\s공백 문자와 일치합니다.
[ \t-\r]와 동일합니다.\S공백이 아닌 문자와 일치합니다.
[^ \t-\r]와 동일합니다.\w“단어 문자”(ASCII만)와 일치합니다.
[A-Za-z0-9_]와 동일합니다.\W“단어 문자”가 아닌 문자(ASCII만)와 일치합니다.
[^A-Za-z0-9_]와 동일합니다.\이스케이프 문자. 위에 나열된 것을 제외하고 백슬래시 뒤에 오는 다른 모든 문자는 문자 그대로 취급됩니다. 예를 들어,
\*는 리터럴*와 동일합니다(*연산자로 취급되지 않음).\r,\n등은 특별하게 처리되지 않으며, 리터럴 문자r,n등과 동일하다는 점에 유의하세요. 이 때문에 정규 표현식에 원시 Python 문자열(r"")을 사용하는 것은 권장되지 않습니다. 예를 들어,r"\r\n"을 정규 표현식으로 사용하면"rn"과 동일합니다. CR 문자 뒤에 LF가 오는 것을 일치시키려면"\r\n"을 사용하세요.
지원되지 않음:
횟수가 지정된 반복(
{m,n})명명된 그룹(
(?P<name>...))더 고급 어서션(
\b,\B)\r,\n과 같은 특수 문자 이스케이프 - 대신 Python 자체 이스케이프를 사용하세요기타
예제:
import re
# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")
regex.split("line1\rline2\nline3\r\n")
# Result:
# ['line1', 'line2', 'line3', '', '']
함수¶
- re.search(regex_str: str, string: str) 'match | None'¶
regex_str을 컴파일하고 string에서 검색합니다.
match와 달리, 정규식과 일치하는 첫 번째 위치를 문자열에서 검색합니다(정규식이 앵커되어 있으면 여전히 0일 수 있습니다).
- re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
regex_str을 컴파일하고 string에서 검색하여 모든 일치 항목을 replace로 대체하고 새 문자열을 반환합니다.
replace는 문자열 또는 함수일 수 있습니다. 문자열인 경우
\<number>및\g<number>형식의 이스케이프 시퀀스를 사용하여 해당 그룹으로 확장할 수 있습니다(일치하지 않은 그룹의 경우 빈 문자열). replace가 함수인 경우 단일 인수(일치 항목)를 받아 대체 문자열을 반환해야 합니다.count가 지정되고 0이 아니면 이 횟수만큼 대체가 수행된 후 대체가 중지됩니다. flags 인수는 무시됩니다.
정규식 객체¶
컴파일된 정규 표현식. 이 클래스의 인스턴스는 re.compile()을 사용하여 생성됩니다.
- class re.regex
re.compile()이 반환하는 컴파일된 정규 표현식 객체입니다.- match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
이 컴파일된 정규식을 검색 영역의 시작에 앵커된 상태로 string에 적용하고
match객체를 반환하거나, 정규식이 일치하지 않으면None을 반환합니다. 이는 모듈 수준match의 컴파일된 패턴에 해당하며, 동일한 패턴을 여러 문자열에 적용할 때 훨씬 효율적입니다.선택적 매개변수 pos는 검색을 시작할 string의 인덱스를 지정하며, 기본값은
0입니다. 이는 문자열을 슬라이싱하는 것과 완전히 동일하지는 않습니다.'^'패턴 문자는 문자열의 실제 시작 부분과 개행 직후 위치에서 일치하지만, 검색을 시작하는 인덱스에서 반드시 일치하는 것은 아닙니다.선택적 매개변수 endpos는 string을 어디까지 검색할지 제한합니다. 마치 문자열의 길이가 endpos 문자인 것처럼 동작하므로, pos부터
endpos - 1까지의 문자만 검색됩니다. endpos가None(기본값)이면 문자열 전체가 검색됩니다.
- search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
이 컴파일된 정규식이 일치하는 첫 번째 위치를 찾아 string을 스캔하고
match객체를 반환하거나, 일치하는 위치가 없으면None을 반환합니다. 이는 모듈 수준search()함수의 컴파일된 패턴에 해당하며, 동일한 패턴을 여러 문자열에 적용할 때 훨씬 효율적입니다.선택적 매개변수 pos는 검색을 시작할 string의 인덱스를 지정하며, 기본값은
0입니다. 이는 문자열을 슬라이싱하는 것과 완전히 동일하지는 않습니다.'^'패턴 문자는 문자열의 실제 시작 부분과 개행 직후 위치에서 일치하지만, 검색을 시작하는 인덱스에서 반드시 일치하는 것은 아닙니다.선택적 매개변수 endpos는 string을 어디까지 검색할지 제한합니다. 마치 문자열의 길이가 endpos 문자인 것처럼 동작하므로, pos부터
endpos - 1까지의 문자만 검색됩니다. endpos가None(기본값)이면 문자열 전체가 검색됩니다.
- sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
이 컴파일된 정규식을 string에서 검색하여 모든 일치 항목을 replace로 대체하고 새 문자열을 반환합니다. 이는 모듈 수준
sub()함수의 컴파일된 패턴에 해당하며, 동일한 패턴을 여러 문자열에 적용할 때 훨씬 효율적입니다.replace는 문자열 또는 함수일 수 있습니다. 문자열인 경우
\<number>및\g<number>형식의 이스케이프 시퀀스를 사용하여 해당 그룹으로 확장할 수 있습니다(일치하지 않은 그룹의 경우 빈 문자열). replace가 함수인 경우 단일 인수(일치 항목)를 받아 대체 문자열을 반환해야 합니다.count가 지정되고 0이 아니면 이 횟수만큼 대체가 수행된 후 대체가 중지됩니다. flags 인수는 무시됩니다.
일치 객체¶
일치 객체는 성공적인 일치의 결과를 보관합니다.
- class re.match(regex_str: str, string: str)¶
regex_str을 문자열의 시작에 앵커된 상태로 string과 일치시키고 일치 객체를 반환하거나, 일치하지 않으면
None을 반환합니다. 이는 모듈 수준 단축키입니다:re.match(regex_str, string)은re.compile(regex_str).match(string)과 동일합니다.동일한 일치 객체는
search(), 컴파일된 패턴regex.match()/regex.search()메서드에 의해서도 반환되며,sub()이 사용하는 대체 함수에도 전달됩니다.