[ ] 안의 두 문자 사이에 하이픈(-)을 사용하게 되면 두 문자 사이의 범위(From - To)를 의미한다. 예를 들어[a-c]라는정규 표현식은[abc]와동일하고[0-5]는[012345]와동일하다.
[a-zA-Z] : 알파벳 모두
[0-9] : 숫자
+문자 클래스([ ]) 내에는 어떤 문자나 메타 문자도 사용할수 있지만 주의해야 할 메타 문자가 1가지 있다. 그것은 바로 ^인데, 문자 클래스 내에 ^ 메타 문자가 사용될 경우에는 반대(not)라는 의미를 갖는다. 예를 들어[^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 - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9]와 동일한 표현식이다.
\W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일한 표현식이다.
대문자로 사용된 것은 소문자의 반대임을 추측할 수 있을 것이다.
a.b
“a + 모든문자 + b” → aob, arb, atb, abo(x)
a[.]b
“a + Dot(.)문자 + b” → a.b
※ .는 \n을 제외한 모든 문자와 매치되는데 심지어 \n문자와도 매치되게 할 수도 있다. 나중에 알아보겠지만 정규식 작성시 옵션으로 re.DOTALL 이라는 옵션을 주면 \n문자와도 매치되게 할 수 있다.
ca*t
“c + a(0번부터 무한대까지 반복) + t” → ct, cat, caaaaaaat
ca+t
"c + a(1번 이상 반복) + t" → ct(x), cat, caaaaaaaat
{n,m}
“{n,회이상 반복 m회 이하 반복}”
{3,}
{,3} 둘 다 사용가능
ca{2}t
"c + a(2번 이상 반복) + t" → ct(x), cat(x), caaaaaaaat
? → {0,1}과 동일
정규식 문자열 Match 여부 설명
ab?c abc Yes "b"가1번 사용되어 매치
ab?c ac Yes "b"가0번 사용되어 매치
+ → {1,}
* → {0,}
이후 정규식은 아직 공부안했음