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.compile(regex_str: str, flags: int = 0) 'regex'

정규 표현식을 컴파일하고 regex 객체를 반환합니다.

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입니다. 이는 문자열을 슬라이싱하는 것과 완전히 동일하지는 않습니다. '^' 패턴 문자는 문자열의 실제 시작 부분과 개행 직후 위치에서 일치하지만, 검색을 시작하는 인덱스에서 반드시 일치하는 것은 아닙니다.

선택적 매개변수 endposstring을 어디까지 검색할지 제한합니다. 마치 문자열의 길이가 endpos 문자인 것처럼 동작하므로, pos부터 endpos - 1까지의 문자만 검색됩니다. endposNone(기본값)이면 문자열 전체가 검색됩니다.

search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

이 컴파일된 정규식이 일치하는 첫 번째 위치를 찾아 string을 스캔하고 match 객체를 반환하거나, 일치하는 위치가 없으면 None을 반환합니다. 이는 모듈 수준 search() 함수의 컴파일된 패턴에 해당하며, 동일한 패턴을 여러 문자열에 적용할 때 훨씬 효율적입니다.

선택적 매개변수 pos는 검색을 시작할 string의 인덱스를 지정하며, 기본값은 0입니다. 이는 문자열을 슬라이싱하는 것과 완전히 동일하지는 않습니다. '^' 패턴 문자는 문자열의 실제 시작 부분과 개행 직후 위치에서 일치하지만, 검색을 시작하는 인덱스에서 반드시 일치하는 것은 아닙니다.

선택적 매개변수 endposstring을 어디까지 검색할지 제한합니다. 마치 문자열의 길이가 endpos 문자인 것처럼 동작하므로, pos부터 endpos - 1까지의 문자만 검색됩니다. endposNone(기본값)이면 문자열 전체가 검색됩니다.

sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

이 컴파일된 정규식을 string에서 검색하여 모든 일치 항목을 replace로 대체하고 새 문자열을 반환합니다. 이는 모듈 수준 sub() 함수의 컴파일된 패턴에 해당하며, 동일한 패턴을 여러 문자열에 적용할 때 훨씬 효율적입니다.

replace는 문자열 또는 함수일 수 있습니다. 문자열인 경우 \<number>\g<number> 형식의 이스케이프 시퀀스를 사용하여 해당 그룹으로 확장할 수 있습니다(일치하지 않은 그룹의 경우 빈 문자열). replace가 함수인 경우 단일 인수(일치 항목)를 받아 대체 문자열을 반환해야 합니다.

count가 지정되고 0이 아니면 이 횟수만큼 대체가 수행된 후 대체가 중지됩니다. flags 인수는 무시됩니다.

split(string: str, max_split: int = -1, /) List[str]

정규식을 사용하여 string을 분할합니다. max_split이 지정되면 수행할 최대 분할 횟수를 지정합니다. 문자열 목록을 반환합니다(지정된 경우 최대 max_split+1개의 요소가 있을 수 있습니다).

일치 객체

일치 객체는 성공적인 일치의 결과를 보관합니다.

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()이 사용하는 대체 함수에도 전달됩니다.

group(index: int) str

일치하는 (하위)문자열을 반환합니다. index는 전체 일치의 경우 0이고, 각 캡처 그룹의 경우 1 이상입니다. 숫자 그룹만 지원됩니다.