it융합응용 수업을 들으며 문자열을 편집하는 작업이 많아 정규표현식이라는 것이 있는것을 알게되었다. 정규표현식은 여러가지언어에서 공통적으로 쓰인다고 하여 이번기회에 학습한다.
특징 => 원하는 조건의 문자열이 있는지 빠르게 확인할 수 있다.(변경도 가능)
1. import re 정규표현식을 사용할 수 있게 import 한다.
2. re.search 와 re.match가있다.
re.search => 처음부터 끝까지 비교
re.match => 처음부터 비교하다가 없으면 바로 없다고 리턴함 (띄어쓰기나 패턴이 안나타나는경우)
●예시
re.match('a', "ab") 는 성공하지만
re.match('b', "ab") 는 None =>a 검사하다가 b와 다르자 바론None을 리턴하는 것임
위의 예시에서 search를 쓴다면 두 예시다 성공적으로 찾는것을 알 수 있다.
이외에도 sub를 이용하여 변경된 문자열을 리턴할 수 있다.
re.sub(찾을 표현식,찾을걸 어떤걸로 변경할지, 검사할 문자열) => 반환 값 : 변경된 문자열
3. 자주 사용하는 정규표현식 표현
'.' : 줄바꿈을 제외한 모든 문자
'*' : 0개이상 = {0,} (같은의미이다.)
'+' : 1개이상 = {1,}
-> 합치면 '.*' : 줄바꿈을 제외한 문자 1개 이상이면 찾아라
{n,m} : n개이상 m개이하일 경우 다 찾아준다.
{n} : 반드시 n개 반복되면 찾는다.
? : {0,1} 있을수도 있고 없을수도 있다.
'(ab)+' : ab가 0번이상 반복되면 찾아라 ex) abab or ababab 같은것들
() 치는걸 그룹핑이라고 하는데 번호가 1번부터 자동으로 메겨진다.
위에 사용하였던 r'(.)\1' 의 의미는 특정문자를 그룹핑하고 \1를 붙여서 그문자가 다시 반복되는 것 즉 aa bb cc같이 같은문자가 반복되는 것을 의미한다.
이때 그룹핑하는 것에 이름을 붙일 수 도있다. 즉, () 내에서 ?P<이름> 으로 이름 부여하고 ?P=이름 으로 사용하면된다.
r'(?P<first>.)(?P=first)' = r'(.)\1' 같은표현이지만 그룹으로 많이 묶을경우 변수처럼 이름을 지정하여 쉽게 짝을 찾을 수 있다.
이외에도 많은 표현이 있으니 https://wikidocs.net/4308 7-2와 7-3에 들어가 필요한 기능이 있을때 마다 찾아보면 도움이 될 것이다.
4. Greedy vs Non-Greedy
greedy 방법은 욕심쟁이 라는 뜻으로 매치할 수 있는 최대한의 문자까지 적용해준다.
Non-Greedy는 최소한의 반복을 수행하도록 도와준다.
-> 따라서 각각 태그에 대해 적용하고 싶다면 Non-Greedy방법을 알고 있는것이 도움이 된다.
.* 에다가 ? 를 붙이면 Non- Greedy 방법으로 적용된 것이다.
5. compile
p = re.compile(찾고싶은 문자열)
p.match(조사할 문자열)
=> 이런식으로 p.match(찾고싶은 문자열, 조사할문자열)과 같은 역할을 수행할 수 있다.
'Language > python' 카테고리의 다른 글
PS시 유용한 Python 메소드 (0) | 2022.11.26 |
---|---|
itertools 모듈의 product 사용법 (0) | 2022.11.15 |
파이썬 Counter 사용법 (0) | 2022.10.25 |