메타문자
메타 문자: 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
. ^ & * + ? {} [] \ | () |
문자 클래스: []
[]
: 내부 문자 중 한 개의 문자와 매치를 뜻함.
[abc]:
"a", "before"와 매치, 하나도 포함하지 않는 "depth"는 매치 X.
[-]
: from-to의 역할을 함.
[a-zA-Z]
는 알파벳 전체, [0-9]는 숫자까지.
[^]
: not이라는 뜻.
[^0-9]
: 숫자가 아닌 문자만 매치.
자주 사용하는 문자 클래스
\d
: [0-9]
. 숫자와 매치.
\D
: [^0-9].
숫자가 아닌 문자와 매치.
\s
: [\t\n\r\f\v]
. 공백문자(white space)와 매치.
\S
: [^ \t\n\r\f\v]
. 공백문자가 아닌 문자와 매치.
\w
: [a-zA-Z0-9_]
. 문자+숫자와 매치
\W
: [^a-zA-Z0-9_]
. 문자+숫자가 아닌 문자와 매치
Dot: .
.
: 두 문자 사이 하나 이상의 어떤 문자가 하나 들어가도 매치.
줄바꿈 문자 \n을 제외한 모든 문자와 매치됨.
a.b
: "a + 문자하나 + b"
반복: *, +, {}, 그리고 ?
*
: 바로 앞 문자가 0부터 무한대(약 2억)로 반복될 수 있음.
ca*t
: ct, cat,caaaaaaaaaaaaat와도 매치 가능.
+
: 바로 앞 문자가 1번 이상 반복될 수 있음.
ca+t
: cat와 caaaaaat는 가능하지만 ct 문자는 매치 불가능.
{}
: 바로 앞 문자의 반복 수를 고정. {m,n}
으로 구간 설정 가능.
ca{2}t
는 caat만 매치,ca{2,5}t
는 a가 2~5회 반복 되는 경우 매치.
?
: 앞 문자가 있어도, 없어도 된다는 뜻.
{0, 1}
과 같은 역할.
Or: |
a|b
: a 또는 b라는 의미.
문자열의 처음: ^
^hi
: 지정 문자열이 처음에 온 경우에만 매치.
문자열의 끝: $
bye$
: 지정 문자열로 끝나는 경우에만 매치.
\A, \Z, \b, \B
\A
: ^와 동일하지만 MULTILINE 옵션 무시, 전체 문자열의 처음만 매치.
\Z
: $와 동일하지만 MULTILINE 옵션 무시, 전체 문자열의 끝과만 매치.
\b
: 단어 구분자, 보통 whitespace에 의해 구분.
/bclass/b
: whitespace로 구분된 class 단어만 매치.백스페이스로 이해할 수 있으니 raw string 표시
r''
로 표현.
\B
: \b와 반대로, whitespace로 구분되지 않은 단어인 경우만 매치.
Grouping: ()
()
: 그룹을 만들어주는 메타 문자.
m.group(n)
: n번째 그룹에 해당되는 문자열 뽑아냄.
n=0인 경우, 매치된 전체 문자열.
\2
: 그루핑한 문자열을 재참조하는 메타문자로, n번째 그룹을 가리킴.
(?P<name>\w+)
: 그룹에 이름을 지어줌.
참조:
m.group('name')
재참조:
(?P=name)
re: 정규식을 이용한 문자열 검색
re.split(' ', text)
: text 문자열을공백 기준으로 분리하여 리스트로 반환.
re.compile('[a-z]+')
: 정규 표현식을 컴파일 함.
컴파일된 패턴 객체 p를 사용하여 작업 수행.
re.match('python')
: 문자열의 처음부터 정규식과 매치되는지 조사.
맨 앞이 매치되지 않으면 None. 중간에 끊기면 중간까지.
re.search()
: 문자열 전체를 검색하여 정규식과 매치되는지 조사.
match와 같지만, 맨 앞이 매치되지 않아도 다음 문자열을 계속 검색함.
re.findall()
: 정규식과 매치되는 모든 문자열을 리스트로 돌려줌.
re.finditer()
: 정규식과 매치되는 모든 문자열을 반복가능한 객체로 돌려줌.
findall과 동일하지만, 반복 가능한 객체를 돌려줌
for r in result: print(r)
re.sub('[]', ' ', text)
: text 문자열에서 표현식에 맞는 내용을 빈칸으로 대체.
축약하기: re.match(‘[a-z]+', ‘python')
한 번 만든 패턴 객체를 여러번 사용할때 편리함.
match 객체의 메서드
m.group()
: 매치된 문자열을 돌려줌.
m.start()
: 매치된 문자열의 시작 위치를 돌려줌.
search 메서드를 사용하면 값이 0과 다르게 나올 것.
m.end()
: 매치된 문자열의 끝 위치를 돌려줌.
m.span()
: 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려줌.
컴파일 옵션
re.compile('a.b', re.S)
와 같은 방식으로 사용함.
re.DOTALL
: dot(.)이 줄바꿈 문자를 포함한 모든 문자와 매치할 수 있게 함.
==
re.S
re.IGNORECASE
: 대소문자와 관계없이 매치할 수 있게 함.
==
re.I
re.MULTILINE
: 여러 줄과 매치 가능하게 함. ^와 $ 사용과 관계 있는 옵션.
^와 $ 메타 문자를 문자열의 각 줄마다 적용해주는 것.
==
re.M
re.VERBOSE
== re.X
전방 탐색, sub 메서드 등등 많이 있음…