정규표현식
정규표현식은 따로있고 파이썬의 함수들이 지원을 해주는것. 문자열로 만드는것이다.
패턴을 지정해줘야한다(메타문자, 리터럴)
a* → 메타문자. a가 0개 이상와야한다.
문자 클래스: 예를들어 [akr] a또는 k또는 r이 와야한다. 집단이라고 생각. 얘네들 중 하나.
글자수와 관련된 메타문자
ex. A+ 앞에있는애가 몇개 와야한다. 라는걸 알려줌
• {m} : 앞의 문자(패턴)가 m개. (a{3}b) → aaa가(x) aaab(o)
re모듈
정규표현식 문자열로 만들고 re모듈에 넣는다.
내장함수를 뺀 모듈들은 다 import를 하고 써야한다. 기본적으로 메모리에 등록되어있지x
검색함수
Python에서는 정규표현 처리를 하기 위해 표준 라이브러리인 re 모듈을 사용한다. 정규표현 패턴를 이용한 문자열의 추출이나, 치환, 분할 등이 가능하다.
- match객체 match() : 매치하는지를 체크
: 내가 찾은거랑 매치되는 문자를 담겠다. 매치되는 문자열 담아야한다. ex. 전체 전화번호부에서 번호를 찾으면 위치를 알려줘야한다. 전화번호로 시작해야한다. (다 찾지 않는다. 첫번째 것 찾으면 더이상 찾지 않음)
group 매치된 문자를 튜플로 반환
- 정규표현 패턴 : compile()
match()나 search()등은 매치 오브젝트를 리턴한다. 패턴과 일치하는 것이 있는지
- 매치된 위치를 취득 start(), end(), span()
- 매치된 문자열을 취득 group()
- 각 그룹의 문자열을 취득 groups()
match
반환값 (return)
- Match 객체: 일치하는 문자열이 있는 경우
- None: 일치하는 문자열이 없는 경우
- search() : 선두에 한해서 매치하는지를 체크 (매치되는 부분을 모두 얻어내고 싶은 경우 사용). 전화번호부 찾다가 번호가 있으면 찾아줌.
txt = "가격은 4000, 5000, 15000원 입니다.”
p = re.compile(r"\d+") #숫자 1개 이상이 연결. 만약 (r”\d”)이면 1개만 찾는다.
p = re.compile(r"\d{5}") #숫자 5개가 연결 -> 만단위 정수 : match 15000
fullmatch() : 문자열 전체가 매치되는지를 체크. 문자열 전체가 매치되고 있으면 매치 객체가 리턴된다.
findall() : 매치된 부분을 모두 리스트로 취득. 매치된 모든 부분 문자열을 리스트 형식으로 리턴한다. 리스트의 요소는 매치 오브젝트가 아닌 문자열이므로, 이 부분을 주의하자.
매치된 부분 모두 이터레이터로 취득 finditer()
: #finditer(대상문자열) -> 찾은 결과를 조회할 수 있는 Iterator를 반환.
Iterator는 각 결과를 Match객체로 반환한다. 어디있는지도 뽑아낼수 있음
정규표현 패턴으로 문자열을 분할 spilt()
sub(바꿀 문자열, 대상문자열) : 함수일땐 첫번째 파라미터가 패턴
subn(): 몇개 바뀌었는지 까지알려준다.
나누기
나누기는 거의 쓸일이 없다.
구분자를 패턴으로 나누는것. 대부분 .split()으로 쪼갤수 있다.
fruits = "사과 배 복숭아 수박 파인애플"
fruits.split()
['사과', '배', '복숭아', '수박', '파인애플']
하위패턴
전체 패턴안에서 안에 있는 것들을 패턴화 시키는 것. 하위그룹으로 나누는것.
search나 match를 쓸때는 조건문을 쓰는 게 좋다.
greedy와 non-greedy
끝이라는 걸 알리기 위해서는 / 를 써준다.
<이름>____[/이름] → 빨간색까지
div ⇒ divide. <div>파이썬 <b>정규표현식</b></div> 여기부터 여기까지. 최대한 다 쓰려고 한다. 마지막 >까지 찾으려고 한다.
끝나는것을 최대한 길게 잡아서 씀. 디폴트는 greedy이다.(기본방식)
non greedy(최소로 찾게 하겠다): 첫번째 꺽새를 찾으면 거기까지 끊어버린다. 물음표를 붙인다.
'데이터 분석일기 > python' 카테고리의 다른 글
Iterable, Iterator, Generator와 Decorator (0) | 2023.08.28 |
---|---|
예외처리 (0) | 2023.08.24 |
입출력 (1) | 2023.08.24 |
객체지향 프로그래밍 (0) | 2023.08.21 |
함수 (0) | 2023.08.17 |