Language/python

쉽게 배우는 정규표현식(Python)

Developer Rio 2022. 10. 27. 16:38

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(찾을 표현식,찾을걸 어떤걸로 변경할지, 검사할 문자열) => 반환 값 : 변경된 문자열

해당 string문자열에서 두번중복되는 문자들이 제거된 것을 확인할 수 있다.

 

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