반응형
[ ] |
문자클래스 | [ ] 사이의 문자들과 매치 |
- | [From - To] | ex) [a-zA-Z] = 알파벳 모두 [0-9] = 모든 숫자 |
\d | 숫자 | = [0-9] |
\D | 숫자가 아닌 것 | = [^0-9] |
\s | 공백 | = [ \n\t\r\f\v] |
\S | 공백이 아닌 것 | = [^ \n\t\r\f\v] |
\w | 문자+숫자+_ | = [a-zA-Z0-9_] |
\W | 문자+숫자+_가 아닌 것 | =[^a-zA-Z0-9_] |
\ | 이스케이프 \와 함께 사용하면 일반 문자로 인식된다. |
|
. | \n를 제외한 모든 문자 | . = 모든 문자 |
[.] | []안에 .을 넣을 경우 그냥 '.'으로 인식 | [.] = 온점. |
| | or | |
^ | [] 바깥에 있을 경우 문자열의 시작과 매치 re.MULTILINE과 함께 쓰인다면 각 줄의 첫 문자와 일치 |
ex) ^a = a로 시작하는 |
[^] | [] 안에 있을 경우 [] 안의 정규표현식을 부정(not)한다. | ex) [^123] = 123이 아닌 것 |
$ | 문자열의 끝과 매치 re.MULTILINE과 함께 쓰인다면 각 줄의 끝 문자와 일치 |
|
* | 반복 (0 ~ ∞) | ex) mizy* = miz / mizy / mizyyyyy |
+ | 반복 (1 ~ ∞) | ex) mizy+ = mizy / mizyy |
? | 있어도 되고 없어도 된다. (0 또는 1) | ex) miz?y = miy / mizy |
{m} | m번 반복 | ex) mizy{3} = mizyyy |
{x, y} | x ~ y번 반복 | ex) mizy{2, 4} = mizyy / mizyyy |
import re
print("--------------------------------------------------")
# 원하는 정규식으로 re.compile
regex = re.compile('[a-z]+')
# match : 문자열의 처음부터 정규식과 매치되는지 체크
m = regex.match("123 haha")
print(m)
# search : 문자열 전체를 검색하여 정규식과 매치되는지 체크
m = regex.search("123 haha")
print(m)
# findall : 정규식과 매치되는 모든 문자열을 리스트로 리턴
m = regex.findall("python 123 haha")
print(m)
# finditer : 정규식과 매치되는 모든 문자열 반복가능한 객체로 리턴
m = regex.finditer("python 123 haha")
print("--------------------------------------------------")
m = regex.search("python 123 haha")
# match, search 객체의 메서드
# group : 매치된 첫 문자열 리턴
print(m.group())
# 매치된 문자열 시작 위치 리턴
print(m.start())
# 매치된 문자열 끝 위치 리턴
print(m.end())
# 매치된 문자열 (시작,끝) 튜플 리턴
print(m.span())
print("--------------------------------------------------")
# 코드 축약
regex = re.compile('[a-z]+')
m = regex.match("123 haha")
if m == None:
print(m,"!!")
m = re.search('[a-z]+', "123 haha")
print(m)
# 대소문자 무시
regex = re.compile('[a-z]')
print(regex.match('PYTHON'))
regex = re.compile('[a-z]', re.IGNORECASE)
print(regex.match('PYTHON'))
print("--------------------------------------------------")
text = """bingo@google.com # 개행문자를 포함하는 문자열
hello.hello@gmail.com
olleh123@gmail.com
niceto_22@yahoo.com
niceto@yahoo111.com
niceto@yahoo.com22
notme"""
# 이메일 패턴
pattern = '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'
regex = re.compile(pattern, re.IGNORECASE)
print(regex.findall(text))
print("--------------------------------------------------")
출력 결과
--------------------------------------------------
None
<re.Match object; span=(4, 8), match='haha'>
['python', 'haha']
--------------------------------------------------
python
0
6
(0, 6)
--------------------------------------------------
None !!
<re.Match object; span=(4, 8), match='haha'>
None
<re.Match object; span=(0, 1), match='P'>
--------------------------------------------------
['bingo@google.com', 'hello.hello@gmail.com', 'olleh123@gmail.com', 'niceto_22@yahoo.com', 'niceto@yahoo111.com', 'niceto@yahoo.com']
--------------------------------------------------
reference
반응형
'Python' 카테고리의 다른 글
[python] 리스트 자료형 (0) | 2021.03.16 |
---|---|
[python] 수 자료형 (0) | 2021.03.16 |