-
정규 표현식은 메타 문자를 사용하여 특별한 의미를 갖습니다.
예를 들어 문자 클래스 []를 사용한 [0-9], [a-zA-Z], [^0-9], [^a-zA-Z]와 같은 정규 표현식은
- \d : 숫자와 매치
- \D : 숫자가 아닌 것과 매치
- \s : whitespace 문자와 매치
- \S : whitespace가 아닌 것과 매치
- \w : 문자 + 숫자와 매치
- \W : 문자 + 숫자가 아닌 것과 매치
not을 뜻하는 ^는 대문자와 같습니다.
- a.b = a+모든 문자+b
- a[.]b = a+Dot(.)문자 + b
- ca*t = a가 몇번이고 반복됨 ( 0번 반복 가능 )
- ca+t = a가 1번 이상 반복
- ca{n}t = a가 반드시 n번 반복
- cat{2,5}t = a가 2-5회 반복
- ab?c = b가 있어도 되고 없어도 됨
python에는 re라는 정규 표현식을 지원하는 라이브러리가 있습니다. 정규 표현식을 쉽게 사용할 수 있죠
https://www.geeksforgeeks.org/python-splitting-text-and-number-in-string/
아래와 같이 코딩해봅시다.
- match
match를 쓰면 문자열의 처음이 매치되는지 확인합니다.
import re p = re.compile('[a-z]') m = p.match("wee") print("wee에 대한 결과:", m) m = p.match("95wee") print("95wwee에 대한 결과:",m)
- serach
search는 문자열 전체를 검사합니다.
m = p.match("95wee") m2 = p.search("95wee") print("95wwee에 대한 결과(match):",m) print("95wwee에 대한 결과(search):",m2)
- findall 은 다음과 같이 작동합니다.
- finditer는 findall과 같습니다. 하지만 결과를 이터레이터 객체로 돌려줍니다.
p = re.compile('[a-z]') p2 = re.compile('[a-z]+') res = p.findall("wee ji won is so hungry") res2 = p2.findall("wee ji won is so hungry") print("print(findall [a-Z] 결과:", res) print("print(findall [a-Z]+ 결과:", res2)
- 기타 함수를 알아봅시다.
- group : 결과 출력
- start : 문자열이 시작하는 index
- end : 문자열이 끝나는 index
- span : 문자열의 시작과 끝
m = p2.search("95 wee") print("group:", m.group()) print("start:", m.start()) print("end:", m.start()) print("span:", m.span())
- 아래와 같이 한번에 사용할 수도 있습니다.
m = re.match('[a-z]+',"95 wee")
- DOTALL 옵션은 \n를 포함해서 검색합니다.
- I : 대소문자 구별 없이
- M : 여러 라인에 걸쳐 검색합니다.
wee is so hungry becasue she couldn't eat anything in the morning wee always hungry
p = re.compile('[a-z]') m = p.match('a\nb') print(m) p = re.compile('a.b', re.DOTALL) m = p.match('a\nb') print(m)
p = re.compile("^weeji\s\w+") p2 = re.compile("^weeji\s\w+", re.MULTILINE) data = """weeji won weeji two weeji three""" print("multiline 옵션 끔:", p.findall(data)) print("multiline 옵션 켬:", p2.findall(data))
'2020년 > Development' 카테고리의 다른 글
list value를 가진 dictionary 정렬 (0) 2020.06.03 파이썬 전역변수 사용하는 방법 (0) 2020.05.29 시간 복잡도 (0) 2020.04.28 자료구조와 알고리즘 시각화 사이트 (0) 2020.04.28 에라테스토네스의 체 (0) 2020.04.27