flag
: 파이썬의 옵션compile을 통해서 패턴과 flag 등록할 수 있다
compile 종류 | 단축 | 설명 |
---|---|---|
re.compile('패턴', re.DOTALL) | re.comdile('패턴', re.S) | 모든문자 (줄바꿈포함)매칭한다 |
re.compile('패턴', re.IGNODRECASE) | re.comdile('패턴', re.I) | 대소문자 구분 안함 |
re.compile('패턴', re.MULTILINE) | re.comdile('패턴', re.M) | 모든 라인에서 매칭한다 |
re.compile('패턴', re.VERBOSE) | re.comdile('패턴', re.X) | 주석 등의 편의기능 사용가능하다 |
re.compile('패턴', re.ASCII) | re.comdile('패턴', re.A) | ASCII코드만을 사용한다 |
flag
옵션 사용방법2번의 경우를 더 많이 사용한다
g
global로 모든 문자열에서 찾겠다
global
옵션을 지워주면 맨 처음에 나오는 문자열에서만 찾는다
case insensitive
case insensitive
옵션 체크하면 대소문자 구분없음
예시: Hello
, hello
모두 찾음
sitcky
일회용, 최초로 발견되는 문자열만 찾는다
(Anchors)
/^hello/gm
문장 앞에 나오는 hello만 찾겠다
/hello$/gm
문장 끝에 나오는 hello만 찾겠다
(찾기)
모든 문자열은 점으로 표현됨
/./gm
모든 문자열(*
이랑 같은 역할)
/....../gm
모든 6개의 문자열 매칭한다
6자리 문자열을 매칭한다
띄어쓰기도 문자열로 인식된다
그래서
점 자체
를 찾고 싶다면 역슬래시\
를 이용해서 찾는다
/h[ea]llo/gm
hello
, hallo
모두 매칭됨
/h.llo/gm
hello, hallo, hollo던 모두 매칭이 되는데
이때 /h[.]llo/gm
이라고 입력하면 점이 적용되지 않는다
[.]
은 문자 그대로의 점을 매칭
[-]
대괄호는 주로 범위를 나타낼 때 많이 사용된다
예: /h[a-f]llo/gm
/[a-z]/gm
알파벳 소문자 매칭
/[A-Z]/gm
알파벳 대문자 매칭
/[0-9]/gm
숫자 매칭
/[a-zA-Z0-9]/gm
모든 알파벳, 숫자
/[^a-zA-Z0-9]/gm
나머지 문자열 (공백, 특수문자)
[] 안
에서 사용된 꺽쇠 ^
: [^]
not의 의미
/h[^ae]llo/gm
hello, hallo 말고 h.llo hollo 선택됨
[] 밖
에서 사용된 ^
: ^[]
처음이라는 의미
(그룹으로 묶기)
/(on|ues|rida)/gm
on
, ues
, rida
3개 중 하나를 만족해도 매칭하게 된다
/(on|ues)|(rida)/gm
일단 결과값은 동일하지만 (사이트에서) 마우스를 오버했을 때의 설명은 다르다
매칭된 문자열 | 그룹1 | 그룹2 |
---|---|---|
Monday | on | undefined |
Tuesday | ues | undefined |
Friday | undifined | rida |
/.(a|e|o)ll./gm
패턴의 앞뒤로도 텍스트를 붙일 수 있다
hello
Hello
yello
kello
!ello
가 매칭된다
.
: 모든 문자열 가능
(a|e|o)
: 3개의 문자 중에 하나면 매칭된다
ll
: 일반 문자열 "ll"이 일치해야 한다
.
: 아무 문자 하나 매칭 (특수문자 가능)
/.(a|e)ll.() () ()/gm
여러 개의 그룹으로 나눠서 설정할 수도 있다
/(?abc)/gm
`/(?:on|ues)|(rida)/gm `
on|ues
둘 중하나와 일치해도 매칭되긴 하지만 그룹으로 설정되지는 않는다
하지만 rida
는 그룹으로 설정된다
/(?=abc)/gm
abc가 들어간 것을 매칭한다
/hello (?=world)/gm
뒤에 "world"가 들어간 "hello" 만 매칭시킨다
"world"를 매칭시키는 것이 아니다
hello world
hello world hello
매칭된다
Hello world
hello World
는 매칭되지 않는다
abc가 아닌 것을 매칭한다 (not의 의미)
/hello (?!world)/gm
뒤에 "world"가 들어가지 않는 hello만 매칭시킨다
hello World
매칭된다
world
가 아니라 world
이기 때문에 → hello world
(띄어쓰기 두개) 매칭된다
해당 문자가 몇 개 있는지 명시하여 패턴을 찾는다
* + ? {}
사용한다
*
앞에 있는 문자가 한개도 없어도 될때 사용
+
앞에 있는 문자가 한개 이상 있어야 할때 사용
?
앞에 있는 문자가 없거나 있거나
{}
개수 지정가능
{3.}
: {3,and}에서 and가 생략된거라 생각하자
_*
&_{0,}
앞에 있는 문자_
가 0개 ~ N개 0개이상
_+
& _{1,}
앞에 있는 문자_
가 1개 ~ N개 1개이상
_?
&_{0,1}
앞에 있는 문자_
가 0개 ~ 1개 있거나 없거나
/.{5}/gm
공백까지 글자수로 인식되기 때문에 특정하지 못한다
/h{4}/gm
h 다음에 모든 문자가 4개만 이어지는 문자열만 특정된다 (매칭된다)
/[0-9][0-9][0-9][-.* ][0-9][0-9][0-9][0-9][-.* ][0-9][0-9][0-9][0-9]/gm
결과
010-1234-1234
010 1234 1234
010*1234*1234
숫자 사이에 셋 중 하나라도 매칭된다
/[0-9]{3}[-.* ][0-9]{4}[-.* ][0-9]{4}/gm
이때 [0-9]
가 반복되므로 {}
를 활용해서 간단하게 입력할 수도 있다
이렇게 정규표현식을 입력해줄 수 있다
/[0-9]{2,3}[-.* ][0-9]{3,4}[-.* ][0-9]{4}/gm
지역번호 02, 031 모두 찾을 수 있고
가운데번호가 332, 3345 모두 찾을 수 있다
/[0-9a-zA-Z]+@[0-9a-zA-Z].[a-zA-Z]/gm
[0-9a-zA-Z]+
: 1개이상의 문자
맨 앞에 아무 글자도 없을 수는 없으니까
*
(0개이상)이 아니라 +
(1개이상)로
@
: 무조건 포함되어야 하는 문자 @
[0-9a-zA-Z]+
: 1개이상의 문자
.
: 문자 .
[a-zA-Z]+
: 뒤에는 숫자가 나오지 않으니 (1개이상의)문자만 검색
결과 : 아래 두개의 이메일은 매칭되지 않는다
paul-korea@naver.com
(-
때문에)
hojun.lee@gmail.com
(.
때문에)
워드
5개의 글자와 스페이스 하나
not 워드
숫자
not 숫자
스페이스
not 스페이스
1. /[0-9]{3}-[0-9]{4}-[0-9]{4}/gm
2. /[0-9]{3}[-.* ][0-9]{4}[-.* ][0-9]{4}/gm
3. /\d+[-* .]?\d+[-* .]?\d/gm
?
: 앞의 문자가 나올수도 있고 안나올수도 있고
+
: 앞의 문자가 하나 이상으로 나와야한다
1. /\d{3}-\d{4}-\d{4}/gm
2. /\d{3}\W\d{4}\W\d{4}/gm
백슬러시를 이용해서 특수문자 자체를 매칭하기
/abc\\abc/gm
abc/abc
가 매칭된다
^^ :) (hello world)
대괄호, 소괄호 안에 감싸져있는 값들은 데이터분석에서 string값을 주는 경우가 많다
일일히 replit이나 split을 주는 것보다 정규표현식으로 쓰는 것이 더 좋다
/\[\w*\]/gm
\w
: 워드(문자, 숫자)*
몇개의 글자수인지 특정하지 않음[123456]
, [456]
, [abc]
가 매칭된다
[de!f]
는 매칭되지 못한다
/\[\ d*\]/gm
\d
: 숫자만 매칭된다 (문자는 매칭되지 않는다)
[123456]
, [123]
매칭된다
.
: 모든문자(특수문자 포함)*
몇개의 글자수인지 특정하지 않음[123456]
, [456]
, [de!f]
매칭된다
/\(.*\)/gm
: 소괄호 안에 잇는 문자 매칭하기(hello, world)
(name, leejojun), (age, 10), (height, 180), (email, paul-lab@naver.com)
매칭된다
/\\\\.*\/\//gm
: 백슬래시 & 슬래시 매칭하기\\hello world//
매칭된다
\\
: 백슬래시 두개의 정규식이 실제 문자 \
백슬래시 하나를 매칭하기 때문에
백슬래시 두개
를 매칭하고 싶은 경우 정규식에는 \\\\ 백슬래시 4개
를 입력해준다
/\^\^/gm
: 꺽쇠문자특수문자 ^
: 문자열 매칭하거나 그룹의 not의 의미를 가지기 때문에
/^^/gm
이라고 입력하면 ^^
가 매칭되지 않는다
/\:\)/gm
: 콜론 매칭하기:)
매칭하기
/-.*-/gm
-
도 특수문자이긴 하지만 대괄호 안에서만 사용되기때문에 그냥 입력해줘도 된다/\-.*\-/gm
같이 역슬래시를 입력해줘도 문제는 없어서-0901-
, -5043-
, -721-
가 매칭된다
/[ㄱ-ㅎ]/gm
자음만 있는ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎ
매칭된다
/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/gm
모든 한글표현을 매칭한다
/[가-힣]/gm
자음 혹은 모음만이 아니라 하나의 한글글자?를 매칭한다
가나다라마바사아자차카타파하
,수사
수박
수상
동해
물과
백두산이
마르고
닳도록
하느님이
보우하사
우리나라
만세
매칭된다
/^[가-힣]+$/gm
첫 문자부터 종료까지 한글만 있는 문자열을 매칭한다
가나다라마바사아자차카타파하
수사
수박
수상
매칭된다
(동해
물과
백두산이
마르고
닳도록
하느님이
보우하사
우리나라
만세
는 사이에 띄어쓰기로 구분되어있어서 매칭되지 않는 듯 하다)
/^[가-힣 ]+$/gm
한글표현 다음에 띄어쓰기가 있는 문자열도 매칭한다
가나다라마바사아자차카타파하
, 수사
, 수박
, 수상
, 동해
, 물과
, 백두산이
, 마르고
, 닳도록
, 하느님이
, 보우하사
, 우리나라
, 만세
매칭된다
/^[가-힣\-_ ]+$/gm
한글표현 다음에 -
, _
,
가 있는 문자열 매칭한다
`/^[가-힣-_ ]+$/gm`
-
는 범위를 나타내기 때문이다-
앞에 \
를 입력해주면 된다안녕_하세요
, 안녕-하세요
매칭된다