메타문자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 문자와도 매치됩니다.

  1. 'a.b'

위 정규식은 다음과 같습니다.

' a + 모든문자 + b ' 즉 a와 b라는 문자 사이에 어떤 문자가 들어가도 모두 매치 된다는 의미 입니다.

  • 문자열 "aab","a0b","abc"가 정규식 a.b 와 매치되는지 확인.

    • "aab" 는 가운데 문자 "a"가 모든 문자를 의미하는 . 과 일치하므로 정규식과 매치.

    • "a0b" 는 가운데 문자 "0"이 모든 문자를 의미하는 . 과 일치하므로 정규식과 매치됩니다.

    • "abc" 는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는 있어야 하는 정규식과 일치 하지 않으므로 매치 되지 않습니다.

  1. 'a[.]b''

이 정규식의 의미는 다음과 같습니다. "a + Dot(.)문자 + b"

  1. 정규식 '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,}는 *과 동일 합니다.

  1. '{m}' {}을 사용한 몇가지 정규식을 살펴보도록 하겠습니다.

정규식문자열Match 여부설명

ca{2}t

cat

No

"a"가 1번만 반복되어 매치되지 않음

ca{2}t

caat

Yes

"a"가 2번 반복되어 매치

  1. '{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번 반복되어 매치

  1. '?' 반복은 아니지만 비슷한 개념이 있습니다. ? 는 '{0,1}'를 의미합니다.

'ab?c' : "a + b(있어도 되고 없어도 된다) + c"

정규식문자열Match 여부설명

ab?c

abc

Yes

"b"가 1번 사용되어 매치

ab?c

ac

Yes

"b"가 0번 사용되어 매치

  1. 반복 정리

  • 이해하기 쉽고 표현도 간결한 '*', '+', '?' 메타 문자를 사용하는 것이 좋습니다.

  • '*', '+', '?' 메타 문자는 모두 {'m', 'n'} 형태로 고쳐 쓰는 것이 가능합니다.

Last updated