정규표현식이란? (Regular Expressions)
특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식언어를 말한다. 정규 표현식에서 사용되는 기호를 Meta문자라고 표현한다. 표현식에서 내부적으로 특정 의미를 가지는 문자를 말한다.
표현식 | 의미 |
^x | 문자열의 시작 |
x$ | 문자열의 끝 |
x* | 문자가 0번이상 반복됨 |
x? | 문자가 있을 수도 있고 없을 수도 있음 |
x+ | 문자가 1번이상 반복됨 |
x|y | x 또는 y (OR) |
(x) | x를 그룹으로 처리 |
x{n,m} | x가 n번 이상 m번이하 반복됨 (n만 쓰면 n번, n,를 쓰면 n번이상) |
헷갈리는 것들 정리해 봤다.
.은 \n을 제외한 모든 문자를 지칭하는데 $는 \n이 가능하다는 점이 다르다.
한 문장안에 m으로 끝나는 단어가 여러개인 경우 ?이 붙어있으면 non-greedy로 가장 먼저 나온 것을 반환하고 아니라면 가장 마지막에 있는 단어를 반환하게 된다.
표현식 | 의미 | |
. | \n을 제외한 모든 문자 | |
* | 0번이상 반복, 가장 마지막의 것을 찾음 | ^.*m I'm in room |
*? | 0번이상 반복, 먼저 나온 것을 찾음 | ^.*?m I'm in room |
표현식 | 의미 |
\S | 공백이 아닌 모든 문자 |
\s | 공백 [\n, \r, \t, ' '] |
\W | 알파벳, 숫자, _가 아닌 문자 [^a-zA-z0-9_] |
\w | 알파벳, 숫자, _인 문자 [a-zA-z0-9_] |
\b | 문자와 공백사이의 문자 |
\B | 문자와 공백 사이가 아닌 것 |
\D | 숫자가 아닌것 |
\d | 숫자 |
특정한 패턴을 가진 문자열을 찾는데 많이 사용하는데 자연어처리를 하겠다하면 무조건 알고가야한다.
Disjuctions
OR의 개념이다. 대괄호[] 안에 원하는 패턴을 넣어주면 match된 문자열을 찾을 수 있다.
Pattern | matches |
[hH]ungry | hungry, Hungry |
[12345567890] | 숫자 |
괄호안에 hH는 h 또는, H가 들어간 문자를 찾고싶다는 의미이다.
Pattern | matches |
[A-Z] | 영어 대문자 |
[a-z] | 영어 소문자 |
[0-9] | 숫자 |
[가-힣] | 한글 |
범위를 지정해서 사용할 수도 있고 유니코드 순서로 저장되어있다. 문서에서 정규표현으로 한글만 찾고 싶다면 [가-힣]이렇게 표현 쓰면된다. 자소만 사용하고 싶다면 [ㄱ-ㅎ] 또는 [ㅏ-ㅣ]를 사용한다.
다르게 표현하고 싶다면 ' | '를 사용한다.
a | b | c 와 [abc]는 같은 표현이다.
Negation in Disjuctions
그렇다면 부정을 사용하려면 어떻게 해야할까?
패턴 제일 앞에 '^'을 써주면 된다. 앞에 써진 것이 아닌 ^은 그냥 문자 그대로의 ^이 되며 not의 의미로 사용하려면 항상 앞에 써주어야한다.
Pattern | matches |
[^A-Z] | 대문자가 아닌 것 |
[^Ss] | S도 아니고 s도 아닌 것 |
a^b | 패턴 a^b |
https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D
'NLP > 기초' 카테고리의 다른 글
정규표현 유용한 표현 모음집 (0) | 2024.06.18 |
---|---|
[#1 실습] 정규표현식 함수 사용법 (3) | 2021.12.01 |
[#0] 시작 (3) | 2021.12.01 |
댓글