re
는 Python에서 정규 표현식을 사용하기 위한 모듈입니다. 이는 Perl에 있는 것과 유사한 정규 표현식 연산을 제공합니다. str와 bytes 타입에 모두 적용 가능하지만, str 패턴을 bytes 객체에 적용하거나 bytes 패턴을 str 객체에 적용하는 것은 불가능합니다. 이스케이핑은 \
기호를 사용합니다.
모듈 레벨 함수
re 모듈에는 정규 표현식을 위한 많은 함수들이 존재합니다.
re.compile(pattern, flags=0)
인자로 전달된 정규 표현식 문자열 pattern
을 통해 Pattern
객체를 만들어 반환합니다.
Pattern 객체에 대한 것들은 아래에서 다시 설명합니다.
re.search(pattern, string, flags=0)
string
을 스캔하여 pattern
이 일치하는 첫 번째 위치를 찾고, 이에 대응되는 match
객체를 반환합니다. 문자열의 어느 위치도 패턴과 일치하지 않으면 None
을 반환합니다.
re.match(pattern, string, flags=0)
string
의 선두에 0개 이상의 문자가 pattern
과 일치하는 경우, 대응하는 match
객체를 반환합니다. 문자열이 패턴과 일치하지 않으면 None
을 반환합니다. 1개 이상의 \n
으로 이루어진 multiline string의 경우에도 문자열의 시작 부분을 기준으로 판단합니다.
- search : 문자열의 어느 위치든
pattern
과 일치하는지의 여부를 판단
- match : 문자열의 시작 부분에서만
pattern
과의 일치 여부를 판단
re.fullmatch(pattern, string, flags=0)
string
의 전체가 pattern
과 일치하면 대응하는 match
객체를 반환합니다. 여기서도 문자열이 패턴과 일치하지 않으면 None
을 반환합니다.
re.split(pattern, string, maxsplit=0, flags=0)
string
을 전달된 pattern
을 기준으로 split합니다. maxsplit
은 최대 몇 개까지 문자열을 split할지를 나타냅니다. 해당 인자가 0이 아니면, 최대 maxsplit 만큼의 문자열 잘라내기가 발생하고 나머지 문자열이 list의 마지막 요소로 반환됩니다.
re.findall(pattern, string, flags=0)
string
에서 pattern
에 맞는 모든 문자열을 list로 반환합니다. 스캔은 왼쪽에서 오른쪽으로 진행되며, 발견된 순서대로 리스트에 추가됩니다.
re.finditer(pattern, string, flags=0)
string
에서 pattern
에 맞는 모든 문자열에 대한 match
객체를 yield하는 iterator를 반환합니다. findall
과 동일하게 왼쪽에서 오른쪽으로 스캔이 진행되며, 발견된 순서대로 match 객체가 iterator에 추가됩니다.
re.sub(pattern, repl, string, count=0, flags=0)
string
에서 pattern
과 일치하는 부분은 repl
로 변경하여 반환. 정규 표현식 기반의 str.replace()
라고 생각하면 됩니다.
re.subn(pattern, repl, string, count=0, flags=0)
re.sub()
와 같은 작업을 수행하지만 replace한 문자열의 갯수가 포함된 tuple을 반환합니다.
re.escape(pattern)
ASCII 문자, 숫자 및 _(underscore)
를 제외한 패턴의 모든 문자를 이스케이프 처리합니다. 이는 메타 문자(\, %, *, + 등)가 포함되어 있을 수 있는 리터럴 문자열을 정규 표현식에 사용하는 경우 매우 유용합니다.
re.purge()
모듈 레벨 함수를 이용해 정규 표현식 관련 작업을 수행할 경우, 인자로 전달된 pattern
은 함수 호출마다 Pattern
객체로 변환됩니다. 해당 함수를 이용해 정규 표현식 캐시를 지울 수 있습니다.
정규 표현식 객체(Pattern 객체)
같은 정규 표현식을 가지고 재사용하는 경우, re.compile
을 통해 Pattern
객체를 만들어 사용하는 것이 더 효율적입니다. 해당 객체는 아래와 같은 메소드와 속성들을 가지고 있습니다.
regex.search(string[, pos[, endpos]])
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.search()
와 동일하며, 선택 인자 pos
와 endpos
는 각각 search가 동작할 시작 인덱스와 마지막 인덱스를 명시하여 검색 영역을 제한하기 위해 사용됩니다. 각각 0, len(string)입니다.
regex.match(string[, pos[, endpos]])
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.match()
와 동일하며, 선택 인자들은 regex.search()
와 동일한 의미입니다.
regex.fullmatch(string[, pos[, endpos]])
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.match()
와 동일하며, 선택 인자들은 regex.search()
와 동일한 의미입니다.
regex.split(string, maxsplit=0)
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.split()
과 동일합니다.
regex.findall(string[, pos[, endpos]])
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.findall()
과 동일하며, 선택 인자들은 regex.search()
와 동일한 의미입니다.
regex.finditer(string[, pos[, endpos]])
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.finditer()
와 동일하며, 선택 인자들은 regex.search()
와 동일한 의미입니다.
regex.sub(repl, string, count=0)
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.sub()
와 동일합니다.
regex.subn(repl, string, count=0)
미리 컴파일된 정규 표현식을 사용한다는 점을 제외하면 re.subn()
과 동일합니다.
regex.groups
정규 표현식에 존재하는 그룹의 갯수를 반환합니다. re 모듈에서 감지할 수 있는 그룹의 문법은 (?P<id>...)
입니다.
regex.groupindex
그룹 이름을 번호와 매핑한 dictionary를 반환합니다. 해당 정규 표현식에 그룹이 사용되지 않았다면 비어 있는 dictionary가 반환됩니다.
regex.pattern
해당 객체를 만들 때 사용한 정규 표현식 문자열을 반환합니다.
match 객체
re 모듈의 많은 함수와 메소드에서 match
객체를 반환합니다. match 객체는 아래와 같은 메소드와 속성들을 가집니다.
match.group([group1, ...])
해당 match
객체의 subgroup 하나를 반환합니다. 인자를 전달하지 않거나 0을 전달하면 match 전체를 반환하고, 여러 개의 인자를 전달하는 경우 인자 당 하나의 항목으로 이루어진 tuple을 반환합니다. 인자로 전달된 그룹 번호가 음수이거나 그룹의 수보다 큰 경우 IndexError
가 발생합니다.
match.__getitem__(g)
match.group(g)
와 동일한 역할을 합니다.
match.groups(default=None)
match
객체의 모든 subgroup을 tuple로 반환합니다.
match.groupdict(default=None)
그룹 이름을 key로 한 subgroup의 dictionary를 반환합니다.
match.pos & match.endpos
각각 Pattern
객체의 search()
나 match()
메소드에 전달된 pos
와 endpos
인자의 값입니다.
match.re & match.string
각각 match
객체 생성 시 사용된 Pattern
객체, search()
나 match()
에 전달된 string
인자를 반환합니다.