정규표현식에 대한 위의 문서를 정리하고자 한다.
위에는 한국어, 아래는 영어.
여기서는 re 모듈이 아닌 정규식 표현에 대해서 더 중점적으로 다루고자 한다.
re 모듈에 대해선 아래의 링크를 참조.
메타 문자 표
메타 문자 및 특수 기호 |
설명 | Ex 및 동일 표현 |
[ ] | 일치시키려는 문자 집합인 문자클래스를 지정하는 데 사용 \ 를 제외한 다른 메타문자들은 문자클래스 안에서 메타문자로 기능하지 않음 |
[가-힣], [a-z], [0-9] |
- | 두 문자를 주고 '-'로 구분하여 문자의 범위를 나타낼 수 있음 | [abc] == [a-c] |
[^ ] | 클래스의 첫번째 문자로 '^'를 포함해 클래스에 나열되지 않은 문자를 일치시킬 수 있음 | [^0-9] == 숫자를 제외한 모든 문자 |
^ | 줄의 시작 부분에 일치 | re.search('^From', 'From Here to Eternity') |
$ | 줄의 끝부분과 일치 | re.search('}$', '{block}') |
\ | \ 다음에 다양한 특수 시퀀스를 알리는 다양한 문자가 따라올 수 있음. 또한, 모든 메타 문자를 이스케이프 처리하여 패턴으로 일치시킬 수 있게 함 |
\\, \[ |
. | 개행 문자를 제외한 모든 문자와 일치, re.DOTALL로 모든 문자와 일치할 수 있음 | |
* (greedy) | 이전 문자를 0번 이상 일치시킬 수 있도록 지정 | ca*t == ct, cat, caaat, ... |
+(greedy) | 이전 문자를 1번 이상 일치시킬 수 있도록 지정 | ca+t == cat, caaat, ... |
?(greedy) | 한 번이나 0번 일치 | home-?brew == homebrew, home-brew |
*?, +?, ?? {m, n}? (non-greedy) |
최소 방식으로 일치를 수행, 가능하면 적은 문자가 일치, 아래 설명 | |
{m} | 정확히 m 반복 | a{6} == 'aaaaaa' |
{m,n} | 적어도 m 반복, 최대 n 반복 | a/{1,3}b == a/b, a//b, a///b {0,} == * {1,} == + {0,1} == ? |
( ) | 그룹, 내부에 포함된 표현식을 함께 묶고 *, +, ? 또는 {m,n}과 같은 반복 한정자로 그룹의 내용을 반복 할 수 있음 |
'(ab)*' = ab를 0번 이상 반복한 것에 일치 |
\숫자 | 패턴의 역참조, 아래 설명 | |
(?:...) | 비 포착 그룹, 아래 설명 | |
(?P<name>...) | 이름 있는 그룹, 아래 설명 | |
(?P=name) | 이름 있는 그룹에 대한 역참조, 아래 예시 | |
\g<name> \g<number> | 이름 있는 그룹 참조, 아래 설명 | |
(?#...) | 주석, 괄호의 내용은 단순히 무시됨 | |
(?=...) | 긍정적인 미리보기 어서션 현재 위치에서 성공적으로 일치하면 성공하고, 그렇지 않으면 실패 |
Isaac (?=Asimov) == Asimov가 뒤따를 때만 Isaac과 일치 |
(?!...) | 부정적인 미리보기 어서션 포함된 정규식이 문자열의 현재 위치에서 일치하지 않으면 성공 |
bat, exe 확장자 제외 == .*[.](?!bat$|exe$)[^.]*$ |
(?<=...) | 긍정적인 되돌아보기 어서션 문자열의 현재 위치 앞에 현재 위치에서 끝나는 ...와의 일치가 있으면 일치 |
re.search('(?<=abc)def', 'abcdef') == 'def' |
(?<!...) | 부정적인 되돌아보기 어서션 문자열의 현재 위치 앞에 ...와의 일치가 없으면 일치 |
|
| | 대안, 또는 “or” 연산자 A와 B가 정규식이면, A|B는 A나 B와 일치하는 문자열과 일치 |
Crow|Servo == Crow, Servo |
(?aiLmsux) | 해당 플래그를 전체 정규식에 대해 설정, 플래그에 대해선 아래 설명 플래그는 정규식 문자열에서 처음에 사용해야 함. |
|
(?aiLmsux-imsx:...) | 해당 플래그를 정규식의 일부에 대해 설정하거나 제거 |
특수 시퀀스 표
특수 시퀀스 목록 | 설명 | Ex 및 동일 표현 |
\ | \ 다음에 다양한 특수 시퀀스를 알리는 다양한 문자가 따라올 수 있음. 또한, 모든 메타 문자를 이스케이프 처리하여 패턴으로 일치시킬 수 있게 함 |
\\, \[ |
\d | 모든 십진 숫자와 일치 | \d == [0-9] |
\D | 모든 비 십진 숫자 문자와 일치 | \D == [^0-9] |
\s | 모든 공백 문자와 일치 | \s == [ \t\n\r\f\v] |
\S | 모든 비공백 문자와 일치 | \S == [^ \t\n\r\f\v] |
\w | 모든 영숫자와 일치 | \w == [a-zA-Z0-9_] |
\W | 모든 비 영숫자와 일치 | \W == [^a-zA-Z0-9_] |
\A | 문자열의 시작 부분에서만 일치 | |
\Z | 문자열의 끝부분에서만 일치 | |
\b | 단어 경계, 단어(word)의 시작이나 끝부분에서만 일치하는 폭이 없는 어서션 | |
\B | 또 다른 폭이 없는 어서션 \b의 반대이며, 현재 위치가 단어 경계에 있지 않을 때만 일치 |
Raw 문자열 표기법(Raw String Notation)
r" ", 백 슬래시 이스케이프 문제를 처리하기 위해 사용.
문자 | 단계 |
\section | 일치시킬 텍스트 문자열 |
\\section | re.compile()을 위해 이스케이프 처리된 백 슬래시 |
"\\\\section" | 문자열 리터럴을 위해 이스케이프 처리된 백 슬래시 |
일반 문자열 | Raw 문자열 |
"ab*" | r"ab*" |
"\\\\section" | r"\\section" |
"\\w+\\s+\\1" | r"\w+\s+\1" |
컴파일 플래그
정규식의 작동 방식을 수정하는 데 사용. | (OR) 을 사용해 다중 플래그 사용 가능. ex)re.I | re.M
플래그 | 의미 |
ASCII, A | \w, \b, \s 및 \d와 같은 여러 이스케이프가 해당 속성이 있는 ASCII 문자에만 일치하도록 함 |
DOTALL, S | .가 개행 문자를 포함한 모든 문자와 일치하도록 함 |
IGNORECASE, I | 대소 문자 구분 없는 일치를 수행 |
LOCALE, L | \w, \W, \b, \B 및 대소 문자를 구분하지 않는 일치를 유니코드 데이터베이스 대신 현재 로케일에 의존하도록 만듦 다른 로케일/언어를 처리할 수 있음 |
MULTILINE, M | 다중 행 일치, 문자열 뿐만 아니라 문자열 내 줄 바꿈까지 고려, ^와 $에 영향을 줌 |
VERBOSE, X (‘확장’ 용) | 더 명확하고 이해하기 쉽게 정리될 수 있는 상세한 RE를 활성화 문자 클래스에 있거나 이스케이프 되지 않은 백 슬래시 뒤에 있을 때를 제외하고, RE 문자열 내의 공백을 무시 |
비 포착 그룹과 이름 있는 그룹, 역참조 문법
비 포착 그룹의 사용 : (?:...)
이름 있는 그룹의 사용 : (?P<name>...)
역참조 문법 : 패턴의 역참조를 사용하면 이전 포착 그룹의 내용이 문자열의 현재 위치에서도 발견되어야 한다고 지정할 수 있음. 예를 들어, \1은 그룹 1의 정확한 내용이 현재 위치에서 발견되면 성공하고, 그렇지 않으면 실패.
이름 있는 그룹 참조 : \g<name> / \g<number>
Greedy와 Non-Greedy 비교
참고
re 모듈을 사용하기 전에, 더 빠르고 간단한 문자열 메서드로 문제를 해결할 수 있는지 고려하라.
문자열은 고정 문자열을 사용하는 연산을 수행하는 몇 가지 메서드를 가지고 있으며, 대개 훨씬 빠릅니다. 더 크고, 더 일반화된 정규식 엔진 대신, 구현이 목적에 맞게 최적화된 단일하고 작은 C 루프이기 때문입니다. (문서 발췌)
ex) replace, translate
728x90
'Data > Information' 카테고리의 다른 글
git fork에 대한 짧은 조사 + 고찰 (0) | 2022.11.26 |
---|---|
re - 정규식 연산 (0) | 2022.04.22 |
Sql 문법 빠르게 훑어보기 (0) | 2022.04.01 |
Hugging Face, Question answering (0) | 2022.04.01 |
Hugging Face, Training a causal language model from scratch (0) | 2022.04.01 |