메타문자1
정규 표현식에서 사용하는 메타 문자는 다음과 같습니다.
. ^ $ * + ? { } [ ] \ | ( )
문자 클래스 []
문자클래스 설명
' [ ] ' 사이의 문자들과 매치 라는 의미를 갖음.
'[abc]' 라면 이 표현식의 의미는 a,b,c 중 한개의 문자와 매치를 뜻함
"apple" 이라는 단어는 a를 포함하고있으므로 Matched
"fox" 라는 단어는 a,b,c 중 포함하고 있지 않으므로 Unmatched
'[ ]' 사이에 하이픈을 사용하면 'from - to' 를 의미.
'[a-c]' 라는 정규식은 '[abc]' 와 동일함.
'[0-5]' 라는 정규식은 '[012345]' 와 동일함.
'[a-zA-Z]' : 알파벳 모두를 뜻함.
'[0-9]' 숫자를 뜻한다.
'^' 의 사용은 반대를 의미한다.
'[^0-9]' 는 숫자가 아닌 문자만 해당.
자주사용하는 문자 클래스 '[0-9]','[a-zA-Z]' 등은 많이 사용되는 정규식이므로 별도의 표기법을 사용할 수 있음.
' \d ' : 숫자와 매치,'[0-9]'와 동일한 표현식.
' \D' : 숫자가 아닌 것과 매치, '[^0-9]'와 동일한 표현식.
' \s' : whitespace 문자와 매치, '[\t\n\r\f\v]'와 동일한 표현식입니다. 맨앞의 빈 칸은 공백문자(space)를 의미.
' \S' : whitespace 문자가 아닌 것 과 매치, [^\t\n\r\f\v]와 동일한 표현식.
' \w ' : 문자 + 숫자 와 매치, '[a-zA-Z0-9_]' 와 동일한 표현식.
' \W ' : 문자 + 수자 가 아닌 매치, '[^a-zA-Z0-9_]'와 동일 한 표현식.
대문자로 사용은 소문자의 반대임을 알 수 있습니다,
Dot(.)
정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자인 '\n'을 제외한 모드 문자와 매치됨을 의미합니다.
re 라이브러리 사용시 re.DOTALL 옵션을 주면 \n 문자와도 매치됩니다.
'a.b'
위 정규식은 다음과 같습니다.
' a + 모든문자 + b ' 즉 a와 b라는 문자 사이에 어떤 문자가 들어가도 모두 매치 된다는 의미 입니다.
문자열 "aab","a0b","abc"가 정규식 a.b 와 매치되는지 확인.
"aab" 는 가운데 문자 "a"가 모든 문자를 의미하는 . 과 일치하므로 정규식과 매치.
"a0b" 는 가운데 문자 "0"이 모든 문자를 의미하는 . 과 일치하므로 정규식과 매치됩니다.
"abc" 는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는 있어야 하는 정규식과 일치 하지 않으므로 매치 되지 않습니다.
'a[.]b''
이 정규식의 의미는 다음과 같습니다. "a + Dot(.)문자 + b"
정규식 'a[.]b'는 "a.b" 문자열과 매치되고, "a0b" 문자열과는 매치 되지 않습니다. 헷갈릴 수 있는 경우가 있습니다. '[]' 내에 Dot(.) 메타 문자가 사용된다면 문자 '.' 그대로의 의미로 인식해야합니다. 모든문자라는 의미가 아닙니다.
반복 '*'
ca*t
이 정규식에는 반복을 의미하는 *메타 문자가 사용되었습니다. 여기에서 사용한 *은 * 바로앞에 있는 문자 a가 0부터 무한대로 반복 될 수 있다는 의미 입니다.
정규식 | 문자열 | Match 여부 | 설명 |
---|---|---|---|
ca*t | ct | Yes | "a"가 0번 반복되어 매치 |
ca*t | cat | Yes | "a"가 0번 이상 반복되어 매치 (1번 반복) |
ca*t | caaat | Yes | "a"가 0번 이상 반복되어 매치 (3번 반복) |
반복 '+'
반복을 나타내는 또 다른 메타 문자로 + 가 있습니다. + 는 최소 1번 이상 반복될 때 사용합니다. '*'이 반복 횟수가 0이라면 +는 반복 횟수 1부터 입니다.
다음 정규식을 예제로 사용하겠습니다.
ca+t : "c + a(1번 이상 반복) + t"
매치여부를 표로 표현하면 다음과 같습니다.
정규식 | 문자열 | Match | 여부 설명 |
---|---|---|---|
ca+t | ct | No | "a"가 0번 반복되어 매치되지 않음 |
ca+t | cat | Yes | "a"가 1번 이상 반복되어 매치 (1번 반복) |
ca+t | caaat | Yes | "a"가 1번 이상 반복되어 매치 (3번 반복) |
반복 '{m,n}, ?'
'{ }' 메타 문자를 사용한다면 반복 횟수를 고정 할 수도 있습니다.
'{m,n}' 정규식을 사용하면 반복 횟수가 m부터 n까지 매치 할 수 습니다.
m 이나 n을 생략 할수도 있습니다.
{1,}는 +와 동일하고, {0,}는 *과 동일 합니다.
'{m}' {}을 사용한 몇가지 정규식을 살펴보도록 하겠습니다.
정규식 | 문자열 | Match 여부 | 설명 |
---|---|---|---|
ca{2}t | cat | No | "a"가 1번만 반복되어 매치되지 않음 |
ca{2}t | caat | Yes | "a"가 2번 반복되어 매치 |
'{m,n}'
ca{2,5}t : "c + a(2~5회 반복) + t"
위 정규식에 대한 매치여부는 다음 표와 같습니다.
정규식 | 문자열 | Match 여부 | 설명 |
---|---|---|---|
ca{2,5}t | cat | No | "a"가 1번만 반복되어 매치되지 않음 |
ca{2,5}t | caat | Yes | "a"가 2번 반복되어 매치 |
ca{2,5}t | caaaaat | Yes | "a"가 5번 반복되어 매치 |
'?' 반복은 아니지만 비슷한 개념이 있습니다. ? 는 '{0,1}'를 의미합니다.
'ab?c' : "a + b(있어도 되고 없어도 된다) + c"
정규식 | 문자열 | Match 여부 | 설명 |
---|---|---|---|
ab?c | abc | Yes | "b"가 1번 사용되어 매치 |
ab?c | ac | Yes | "b"가 0번 사용되어 매치 |
반복 정리
이해하기 쉽고 표현도 간결한 '*', '+', '?' 메타 문자를 사용하는 것이 좋습니다.
'*', '+', '?' 메타 문자는 모두 {'m', 'n'} 형태로 고쳐 쓰는 것이 가능합니다.
Last updated