본문 바로가기

Python

[python] 정규식 처리

반응형
[ ]
문자클래스 [ ] 사이의 문자들과 매치
- [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

mizykk.tistory.com/47

반응형

'Python' 카테고리의 다른 글

[python] 리스트 자료형  (0) 2021.03.16
[python] 수 자료형  (0) 2021.03.16