짧 은 글 한 편 으로 고질병 을 없 애고 정규 공포 증 을 철저히 해결 하 자!

25610 단어 python 논도
글 목록
  • 1. 정규 표현 식 의 쓰기
  • 2. 정규 표현 식 의 용법
  • 2.1 모드 매 칭: match ()
  • 2.2 모드 검색: search ()
  • 2.3 모든 일치: findall ()
  • 2.4 문자열 분할: split ()
  • 2.5 하위 문자열 교체: sub ()
  • 정규 라 는 단 어 는 중국어 사전에 서 '그 예절 의 법칙' 으로 해석 되 는데 정규 표현 식 과 는 무관 한 것 같다.다행히 한 자 는 문 자 를 보고 의 미 를 살 릴 수 있어 정규 를 표준 에 맞 는 규칙 으로 이해 하 는 것 도 적절 한 것 같다.정규 표현 식 이란 사전에 정 의 된 특정한 문자 와 이 특정한 문자 의 조합 으로 '규칙 문자열' 을 구성 하여 문자열 에 대한 여과 논 리 를 표현 하 는 것 이다.정규 표현 식 의 영문 쓰기 Regular Expression 은 RE 로 간략하게 쓰 입 니 다.
    정규 표현 식 의 규칙 은 어렵 고 어려워 초보 자 들 을 뒷걸음질 치 게 한다.사실 기본 개념 을 이해 하고 지식 점 을 조금 요약 하 며 정규 표현 식 을 익히 고 익히 는 것 도 어 려 운 일이 아니 라 약 30 분 이면 할 수 있다.우 리 는 정규 표현 식 의 학습 을 두 부분 으로 나 눌 수 있다.
  • 정규 표현 식 을 어떻게 씁 니까?
  • 정규 표현 식 을 어떻게 사용 합 니까?

  • 첫 번 째 문 제 는 언어 와 상 관 없 이 정규 표현 식 의 문자 집합 과 특수 기호 집합, 그리고 몇 가지 규칙 을 알 아야 합 니 다.두 번 째 문 제 는 Python 에 내 장 된 정규 표현 식 표준 모듈 re 의 용법 입 니 다.
    1. 정규 표현 식 의 표기 법
    정규 표현 식 을 쓰 는 것 은 찾 고 싶 은 문자열 의 특징 을 규칙 적 으로 설명 하 는 것 입 니 다.예 를 들 어 아래 의 서법 은 소문 자로 구 성 된 길이 가 3 에서 8 자리 인 문자열 을 묘사 했다.
    >>> pstr = r'[a-z]{3,8}'
    

    이것 은 원생 문자열 (문자열 앞 표지 r, 역 슬 래 쉬 에 대해 특별한 처 리 를 하지 않 습 니 다) 입 니 다. 괄호 안에 사용 할 수 있 는 문자 집합 을 약 속 했 고 괄호 는 문자 의 최소 자릿수 와 최대 자릿수 를 약 속 했 습 니 다.유사 한 정규 표현 식 은 정규 표현 식 의 문자 집합 과 조합 규칙 을 설명 하 는 몇 가지 기 호 를 정의 합 니 다.아래 표 는 자주 사용 하 는 기호 와 의 미 를 열거 하 였 다.
    기호.
    설명 하 다.
    .
    줄 바 꿈 자 를 제외 한 임의의 문자 와 일치 합 니 다.
    \
    전의 문 자 는 뒤의 문 자 를 원래 의 뜻 으로 바 꿉 니 다.예 를 들 어 알파벳 n 을 줄 바 꿈 문자 로 바 꾸 었 다.
    *
    0 회 또는 여러 번 일치, {0,}
    +
    1 회 또는 여러 번 일치, {1,}
    ?
    0 회 또는 1 회 일치, {0, 1}
    ^
    문자열 시작 과 일치 합 니 다.여러 줄 모드 에서 각 줄 의 시작 과 일치 합 니 다.
    $
    문자열 의 끝 과 일치 합 니 다. 여러 줄 모드 에서 줄 의 끝 과 일치 합 니 다.
    |
    분 단 된 표현 식 중 임의의 것 과 일치 합 니 다. 왼쪽 에서 오른쪽으로 일치 합 니 다.
    { }
    {m} 은 m 회, {m, n} 은 최소 m 회, n 회, {m,} 은 최소 m 회 일치 함 을 나타 낸다.
    [ ]
    일치 하 는 문자 집합, 문자 집합 내 ^ 반대 표시
    ( )
    하위 표현 식
    \d
    일치 하 는 디지털 문자 집합, [0 - 9]
    \D
    비 디지털 문자 집합 과 일치 합 니 다. [^ 0 - 9] 과 같 습 니 다.
    \s
    빈 칸, 탭 위치, 리 턴, 줄 바 꾸 기 등 을 포함 한 공백 문자 집합 과 일치 합 니 다.
    \S
    비 어 있 는 문자 집합 일치
    \w
    밑줄 을 포함 한 숫자 와 알파벳 이 일치 하 며 [A - Za - z0 - 9] 와 같 습 니 다.
    \W
    밑줄 을 포함 한 숫자 와 알파벳 이외 의 문자 집합 과 일치 하 며 [^ A - Za - z0 - 9] 와 같 습 니 다.
    이 기호 들 의 의미 와 용법 을 이해 하면 임의의 복잡 한 문자열 을 묘사 할 수 있다.다음은 약간 복잡 한 정규 표현 식 몇 개 입 니 다. 초보 자 도 쉽게 이해 할 수 있 을 것 입 니 다.
    >>> pstr = r'[1-9]\d{2}' # 100 999   
    >>> pstr = r'  ([1-9]\d*) ' #          0     ,          
    >>> pstr = r'color=(red|blue)' # color=red,  color=blue,          
    

    2. 정규 표현 식 의 용법
    비록 네 이 티 브 문자열 로 정규 표현 식 을 표시 하지만, 사용 할 때 아무런 문제 가 없 지만, 우 리 는 네 이 티 브 문자열 이 표시 하 는 정규 표현 식 을 re. copile () 로 패턴 대상 으로 컴 파일 하 는 것 에 더욱 익숙 하 다. 그러면 패턴 대상 의 여러 가지 방법 을 직접 사용 할 수 있다.
    >>> import re
    >>> pstr = r'  ([1-9]\d*) '
    >>> p = re.compile(pstr) # 
    

    정규 표현 식 의 패턴 대상 이 있 으 면 우리 가 무엇 을 해 야 하 는 지 알 아야 합 니 다.우 스 꽝 스 럽 게 들 리 지만, 이것 은 확실히 문제 이다. 우 리 는 자신 이 무엇 을 하려 고 하 는 지 정말 잘 모 를 때 가 많다.일반적으로 정규 표현 식 을 사용 하 는 것 은 이런 몇 가지 목적 에 불과 하 다.
  • 정규 표현 식 에 규정된 규칙 에 맞 는 문자열 을 검증 합 니 다
  • 정규 표현 식 의 약정 규칙 에 맞 는 하위 문자열 을 한 문자열 에서 찾 습 니 다
  • 한 문자열 에서 정규 표현 식 의 약정 규칙 에 부합 되 는 모든 하위 문자열 을 찾 습 니 다
  • 정규 표현 식 의 약정 규칙 에 맞 는 하위 문자열 이 존재 하면 이 하위 문자열 로 문자열 을 분할 합 니 다
  • 정규 표현 식 에 규정된 규칙 에 맞 는 모든 문자열 을 바 꿉 니 다
  • 이 다섯 가지 기능 수요 에 따라 모델 대상 은 match (), search (), findall (), split (), sub () 등 다섯 가지 방법 을 제공 하여 이에 대응 합 니 다.
    2.1 모드 일치: match ()
    패턴 매 칭 은 문자열 의 시작 위치 에서 시 작 됩 니 다. 시작 위치 문자 가 다 르 면 매 칭 이 실 패 됩 니 다.문자열 이 패턴 문자열 보다 길 면 일치 하 는 결과 에 영향 을 주지 않 습 니 다.
    >>> s1 = '  2020 '
    >>> s2 = '  2020   '
    >>> s3 = '   2020   '
    >>> p = re.compile(r'  ([1-9]\d*) ')
    >>> result = p.match(s1) #   s1
    >>> print(result) #     
    <re.Match object; span=(0, 7), match='  2020 '>
    >>> result.group() # group()           
    '  2020 '
    >>> result.groups()# groups()               
    ('2020',)
    >>> result = p.match(s2) #     ,  s2       
    >>> print(result)
    <re.Match object; span=(0, 7), match='  2020 '>
    >>> result = p.match(s3) #     ,  s3       
    >>> print(result)
    None
    

    문자열 이 완전히 일치 하도록 요구 하려 면 정규 표현 식 마지막 에 $를 추가 해 야 합 니 다. 일치 하 는 문자열 의 끝 과 패턴 문자열 이 일치 하 기 를 기대 합 니 다.
    >>> p = re.compile(r'  ([1-9]\d*) $')
    >>> result = p.match(s2) #      $ ,        s2    
    >>> print(result)
    None
    

    2.2 모드 검색: search ()
    패턴 대상 의 search () 방법 은 문자열 에서 일치 하 는 문자열 을 찾 습 니 다. 첫 번 째 일치 하 는 문자열 을 찾 으 면 되 돌아 갑 니 다.문자열 이 일치 하지 않 으 면 None 으로 돌아 갑 니 다.
    >>> p = re.compile(r'  ([1-9]\d*) ')
    >>> result = p.search(s1)
    >>> print(result) # s1       
    <re.Match object; span=(0, 7), match='  2020 '>
    >>> result.group()
    '  2020 '
    >>> result.groups()
    ('2020',)
    >>> print(p.search(s2)) # s2       
    <re.Match object; span=(0, 7), match='  2020 '>
    >>> print(p.search(s3)) # s3       
    <re.Match object; span=(1, 8), match='  2020 '>
    >>> p = re.compile(r'^  ([1-9]\d*) $') #             
    >>> print(p.search(s2)) # s2         
    None
    >>> print(p.search(s3)) # s3        
    None
    

    2.3 모든 일치: findall ()
    패턴 대상 의 findall () 방법 은 문자열 에 일치 하 는 모든 하위 문자열 을 목록 으로 되 돌려 줍 니 다.또한 패턴 대상 의 finditer () 는 findall () 과 유사 하 며 교체 기 에 불과 합 니 다.아래 의 여러 줄 텍스트 를 예 로 들 면 5 줄 11 열 수치 데 이 터 를 분석 해 야 합 니 다.
    >>> txt = """
    WDC for Geomagnetism, Kyoto
    Hourly Equatorial Dst Values (REAL-TIME)  
              MARCH   2020
    DAY   1   2   3   4   5   6   7   8    9  10
     1  -19 -11 -10  -7  -8  -9 -11 -14  -15  -9
     2  -12 -14 -14 -16 -15 -14 -12 -11  -12 -10
     3    1  -3 -10  -9  -9  -9 -10 -10  -13  -9
     4   -6  -3  -1  -2  -2  -3  -2  -3   -6  -3
     5    1   3   3   3   0  -3  -2  -2   -1   2
     """
    

    분석 을 통 해 알 수 있 듯 이 모든 데 이 터 는 이전에 적어도 하나의 빈 칸 이 있 는데 첫 번 째 열 이 정수 인 것 을 제외 하고 다른 열 데 이 터 는 플러스 와 마이너스 가 있다.행동 단위 로 한 줄 씩 처리 하기 때문에 패턴 컴 파일 장식 파 라 메 터 를 re. M 으로 지정 하고 패턴 문자열 의 첫 끝 에 ^ 와 $기 호 를 추가 해 야 합 니 다.이에 따라 정규 표현 식 을 쉽게 쓰 고 모든 데 이 터 를 분석 할 수 있 습 니 다.
    >>> p = re.compile('^\s([1-5])\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)$', flags=re.M)
    >>> result = p.findall(txt)
    >>> result
    [('1', '-19', '-11', '-10', '-7', '-8', '-9', '-11', '-14', '-15', '-9'), ('2', '-12', '-14', '-14', '-16', '-15', '-14', '-12', '-11', '-12', '-10'), ('3', '1', '-3', '-10', '-9', '-9', '-9', '-10', '-10', '-13', '-9'), ('4', '-6', '-3', '-1', '-2', '-2', '-3', '-2', '-3', '-6', '-3'), ('5', '1', '3', '3', '3', '0', '-3', '-2', '-2', '-1', '2')]
    

    2.4 문자열 분할: split ()
    패턴 대상 의 split () 방법 은 일치 하 는 하위 문자열 로 문자열 을 분할 한 후 얻 은 목록 을 되 돌려 줍 니 다. 하위 문자열 이 없 으 면 빈 목록 으로 돌아 갑 니 다.다음 예 는 문장 부호 로 문자열 을 분할 하 는 것 을 보 여 줍 니 다.정규 표현 식 을 사용 하지 않 으 면 이 기능 을 실현 하기 어렵다.
    >>> s = '  ,  。  ?     '
    >>> p = re.compile(r'[,。?]')
    >>> p.split(s)
    ['  ', '  ', '  ', '     ']
    

    2.5 하위 문자열 교체: sub ()
    패턴 대상 의 sub () 방법 은 짝 짓 기 문자열 을 지정 한 내용 으로 바 꾼 문자열 을 되 돌려 줍 니 다.아래 코드 는 모든 문장 부 호 를 플러스 (+) 로 바 꾸 는 것 을 보 여 줍 니 다.물론 이곳 의 문장 부호 집 은 세 개의 요소 만 열거 되 어 있다.
    >>> s = '  ,  。  ?     '
    >>> p = re.compile('[,。?]')
    >>> p.sub('+', s)
    '  +  +  +     '
    

    좋은 웹페이지 즐겨찾기