본문 바로가기
NLP/기초

[#1 이론] 정규표현식

by 나는 라미 2021. 12. 1.
728x90
반응형

포항 청하면

 

정규표현식이란? (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

728x90
반응형

'NLP > 기초' 카테고리의 다른 글

정규표현 유용한 표현 모음집  (0) 2024.06.18
[#1 실습] 정규표현식 함수 사용법  (3) 2021.12.01
[#0] 시작  (3) 2021.12.01

댓글