Python

[파이썬] 정규표현식 정리

밀깜 2022. 6. 20. 21:38

1. 도입

프로젝트를 진행할 때 파이썬 웹 크롤링을 진행하였다. 당시 문자열을 직접 parsing하는 코드를 작성하였는데, 생각해보니 그게 가능했던 이유는 HTML 태그를 분석해서 필요한 데이터만 뽑아올 수 있었기 때문이다.

 

만약 긴 텍스트 데이터에서 원하는 형식의 데이터만 가져오려면 좀 더 효율적인 방법이 필요하다는 생각이 들었다. 덕분에 미루고 있던 정규표현식을 공부하게 되었다.

 

2. 메타 문자 사용하기

문자 의미 예시 예시 매칭
^ 문자열 시작 ^he "hello world", "hell", "heck"
$ 문자열 끝 you$ "nice to meet you"
| or ^CSS | awesome$ "CSS is awesome"
"Javascript is awesome"
[] 문자 클래스
(여러 조건 나타내기)
[\d]
[^\d]
[0-5]
"The score is 95"
"The score is 95"
"9876543210"
\d 숫자 "\d" "1st place", "no.2"
\D 숫자를 제외한 모든 문자 "\D" "1st place", "no.2"
\w 알파벳  대소문자, 숫자, 밑줄(_) "\w-\d" "A-9", "_-8"
\W \w를 제외한 모든 문자 "\W\w" "%p"
\s 공백, 탭, 개행 문자 "\s" "hello !!"  => " "
\S \s를 제외한 모든 문자 "\S" "hi !!"  => "h", "i", "!", "!"
\n 개행 문자    
\ 이스케이프    
. 모든 문자 "d.g" "dog", "deg", "dug"
(?i) 대소문자 무시 "(?i)python" "PYTHON", "Python"

 

3. 수량자 사용하기

수량자 의미
('*' 앞의 문자가)
예시 예시 매칭
*  0개 이상 hell* hel, hell, hellll
+ 1개 이상 hell+ hell, helll, helllll
? 0 또는 1개 apple? appl, apple
{n} n개 \D{5} apple, bonus, chair
{n,m}
* 공백 금지
n개 이상, m개 이하 \d{3,5}[_]\w{3,5} 123_qwe, 33333_apple
{n,} n개 이상 [a-z]{2} hi, oh, ha, am
  • 물음표를 제외한 수량자 바로 뒤에 물음표를 붙이면, 정규표현식을 만족하는 최소 단위 마다 검색할 수 있다 
  • 아래 문장에서 차이를 살펴보도록 하자(https://regexr.com/)
<RegExr> was created by <gskinner.com>, and is proudly hosted by <Media Temple.>
  1. '<.*>'으로 검색하는 경우: <RegExr> was created by <gskinner.com>, and is proudly hosted by <Media Temple.>
  2. '<.*?>'으로 검색하는 경우: <RegExr> was created by <gskinner.com>, and is proudly hosted by <Media Temple.>

 

4. 그룹으로 묶기

  • 괄호 안에 하나로 묶을 '패턴'을 추가하고 필요하면 '|' 등을 사용한다. 수량자 등을 붙여서 활용할 수도 있다.
예시 패턴 예시 매칭
(?:land|ocean)_animals land_animals, ocean_animals
(A|B|C)(+|0|-) A+, B+, C-, B0, B+
(boo~){3,} boo~boo~boo~, boo~boo~boo~boo~