1. 정규표현식
1. 메타문자
[ ]
문자 클래스. [ ] 사이의 문자들과 매치
- e.g.
[abc]
가 주어진다면a
,b
,c
한개의 문자만 있으면 매치before
은b
를 포함하므로 매치
[a-zA-Z]
: 알파벳 모두^
: not[^0-9]
: 숫자가 아닌 문자만 매치
\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_]
Dot(.)
\n
를 제외한 모든 문자와 매치
a.b
: a + 모든문자 + baab
(매치),a0b
(매치),abc
(매치X)
a[.]b
: a + . + ba.b
(매치),aab
(매치X)
*
*
앞 문자 무한번 반복가능
ca*t
ct
(매치, 0번 반복),cat
(매치, 1번 반복),caaat
(매치, 3번 반복)
+
+
앞 문자 1번 이상 반복
ca+t
ct
(매치X, 0번 반복),cat
(매치, 1번 반복),caaat
(매치, 3번 반복)
{}
반복 횟수 고정
{m}
: {m}앞 문자가 m번 반복{m, n}
: m~n회 반복{,n}
: n 이하 반복
?
0번 또는 1번 반복 = {0, 1}
2. re 모듈
import re
match()
문자열의 처음부터 정규식과 매치되는지 조사 (매치되지 않으면 None 반환)
- group(): 매치된 문자열 반환
- start(): 매치된 문자열의 시작 위치 반환
- end(): 매치된 문자열의 끝 위치 반환
- span(): 매치된 문자열의 (시작, 끝)에 해당하는 튜플 반환
>>> import re
>>> p = re.compile('[a-z]+')
>>> m = p.match("python")
>>> print(m)
<re.Match object; span=(0, 6), match='python'>
>>> import re
>>> m = re.match('[a-z]+', "python")
>>> print(m)
<re.Match object; span=(0, 6), match='python'>
>>> m.group()
'python'
>>> m.start()
0
>>> m.end()
6
>>> m.span()
(0, 6)
search()
문자열 전체를 검색하여 정규식과 매치되는지 조사 (매치되지 않으면 None 반환)
>>> m = re.search('[a-z]+', "python")
>>> print(m)
<re.Match object; span=(0, 6), match='python'>
findall()
정규식과 매치되는 모든 문자열을 리스트로 반환
>>> result = p.findall("life is too short")
>>> print(result)
['life', 'is', 'too', 'short']
finditer()
정규식과 매치되는 모든 문자열을 반복 가능한 객체로 반환
>>> result = p.finditer("life is too short")
>>> print(result)
<callable_iterator object at 0x01F5E390>
>>> for r in result: print(r)
...
<re.Match object; span=(0, 4), match='life'>
<re.Match object; span=(5, 7), match='is'>
<re.Match object; span=(8, 11), match='too'>
<re.Match object; span=(12, 17), match='short'>
자주 사용하는 함수
문자열 바꾸기: sub
references
'Python' 카테고리의 다른 글
[NLP] 자연어 전처리 (0) | 2022.04.11 |
---|
댓글