ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] 정규표현식 정리
    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~

     

Designed by Tistory.