Regular Expression
- 주로 아이디나 비밀번호 등의 유효성 확인에 사용
문자 클래스로 만들어진 정규식은 “[와 ] 사이의 문자들과의 매치”라는 의미를 갖는다.
- 정규 표현식이 [abc]라면 이 표현식의 의미는 “a, b, c 중 한개의 문자와 매치”를 뜻한다.
- “a” → O “a”가 있으므로 매치
- “before” → O “b”가 있으므로 매치
- “dude” → X 어느 하나도 포함하고 있지 않으므로 매치되지 않음
하이픈(-)을 사용하게 되면 두 문자 사이의 범위(From - To)를 의미한다.
- [a-c] → [abc]와 동일
- [0-5] → [012345]와 동일
- [a-zA-Z] → 알파벳 모두
- [0-9] → 숫자
문자 클래스 내에 ^ 메타 문자가 사용될 경우에는 반대(not)라는 의미를 갖는다
대문자로 사용된 것은 소문자의 반대
\d |
숫자와 매치. [0-9]와 동일한 표현식이다. |
\D |
숫자가 아닌 것과 매치. [^0-9]와 동일한 표현식이다. |
\s |
whitespace 문자와 매치. [\t\n\r\f\v]와 동일한 표현식. 맨 앞의 빈 칸은 공백문자를 의미한다. |
\S |
whitespace 문자가 아닌 것과 매치. [^\t\n\r\f\v]와 동일한 표현식이다. |
\w |
문자+숫자와 매치. [a-zA-Z0-9]와 동일한 표현식이다. |
\W |
문자+숫자가 아닌 문자와 매치. [^a-zA-Z0-9]와 동일한 표현식이다. |
# 정규표현식 Regular Expression
import re
p = re.compile( "[a-z]+" )
print( p.match( "" ) )
print( p.match( " " ) )
print( p.match( "a " ) )
print( p.match( "python!!" ) )
print( p.match( "Python!!" ) )
print( p.match( "pyThon!!" ) )
print( p.match( " python!!" ) )
print( p.search( "" ) )
print( p.search( " " ) )
print( p.search( "a " ) )
print( p.search( "python!!" ) )
print( p.search( "Python!!" ) )
print( p.search( "pyThon!!" ) )
print( p.search( " python!!" ) )
word = p.search( " python!!" )
print( word.start() )
print( word.end() )
print( word.span() )
print( word.group() )
s = "Life is too Short"
print( p.match( s ) )
print( p.search( s ) )
print( p.findall( s ) )
print( p.finditer( s ) )
for word in p.finditer( s ) :
print( word.group() )
p = re.compile( "a.b" )
print( p.search( "ab" ) )
print( p.search( "ac" ) )
print( p.search( "acb" ) )
print( p.search( "a0b" ) )
print( p.search( "a&b" ) )
print( p.search( "a\\tb" ) )
print( p.search( "a\\nb" ) )
print( p.search( "accb" ) )
s = """
abc acb accb a
cb a\\nb a0b a\\tb
"""
print( p.findall( s ) )
p = re.compile( "a.b", re.DOTALL ) # re.S \\n 도 가능
print( p.findall( s ) )
p = re.compile( "[A-Z]+")
print( p.findall( s ) )
p = re.compile( "[A-Z]+", re.IGNORECASE ) # re.I 대소문자 상관없이
print( p.findall( s ) )
s = """python one
pythontwo
python
study python
python 1
life is too short"""
p = re.compile( "^python\\s\\w+" )
print( p.findall( s ) )
p = re.compile( "^python\\s\\w+", re.MULTILINE ) # re.M
print( p.findall( s ) )