-
[파이썬] 정규표현식 정리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.>
- '<.*>'으로 검색하는 경우: <RegExr> was created by <gskinner.com>, and is proudly hosted by <Media Temple.>
- '<.*?>'으로 검색하는 경우: <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~