한 번 보면 알 수 있 는 python 정규 표현 식 사용 안내

16240 단어 python
머리말
정규 표현 식 은 합 격 된 프로그래머 의 필수 적 인 기본 기술 중 하나 로 서 그 유용 성 은 두말 할 필요 도 없다.그런데 왜 파악 하기 가 힘 들 고 사용 하기 도 어 려 울 까?이 글 은 Python 정규 표현 식 을 어떻게 사용 하 는 지 한 번 에 보 여 줄 것 이다.
1. 정규 표현 식 의 구성
Python 의 정규 표현 식 을 어떻게 사용 하 는 지 소개 할 때, 우 리 는 먼저 정규 표현 식 의 각종 기능 과 그 구성 형식 이 어떠한 지 알 아야 한다.
정규 표현 식 은 비구 조 화 된 텍스트 에서 우리 가 원 하 는 내용 을 추출 할 수 있다. 그 본질은 패턴 일치 이 고 지능 화 를 나타 내 는 최초의 수단 이다. 현 재 는 자동화 처리 정보의 절차 에 광범 위 하 게 응용 되 었 다. 파충류 부터 인공지능 까지 어디 에 나 있 고 그 수요 도 상당 하 다.
정규 표현 식 의 작성 을 언급 하 자 N 여 블 로그 에 신기 한 사이트 가 언급 되 었 다.http://www.txt2re.com/이 사 이 트 는 저도 예전 에 사용 한 적 이 있 습 니 다. 만약 에 정규 표현 식 을 할 줄 모 르 고 게 으 름 을 피 우 고 자동 으로 생 성 하려 면 이 사이트 에서 가장 복잡 한 상황 을 복사 해서 붙 여 넣 어야 합 니 다.그리고 일치 하고 싶 은 내용 을 시각 적 인 클릭 조합 을 통 해 원 하 는 정규 표현 식 을 자동 으로 생 성 할 수 있 습 니 다.
그러나 유감스럽게도 이 사 이 트 는 현재 이미 열 리 지 않 는 다.핵심 기술 이 자기 손 에 달 려 있다 는 것 이 사실 이라는 것 을 보 여 주 는 것 이다.이제 정규 표현 식 을 어떻게 작성 해 야 하 는 지 봅 시다.다음은 정규 표현 식 을 진행 하 는 일반적인 절 차 를 사용 합 니 다. 서로 다른 언어 는 그 실현 방법 이 완전히 같 지 않 습 니 다. 우 리 는 오늘 주로 python 을 사용 하여 정규 표현 식 을 진행 하 는 세 가지 일치 방식 에 초점 을 맞추어 우리 가 원 하 는 목표 부분 을 얻 고 다른 방법 에 대해 서 는 나중에 설명 하 겠 습 니 다.
  • 우선 입력 의 대략적인 형식 을 확인 하 세 요
  • 이 입력 의 대체적인 형식 에서 필요 한 내용 과 필요 하지 않 은 내용 을 찾 습 니 다.
  • 정규 표현 식 을 통 해 일치 시 킵 니 다
  • 임시 결 과 를 추출 하여 우리 가 필요 로 하 는 데이터 구조 에 저장 합 니 다
  • 2. python 을 사용 하여 정규 표현 식 절 차 를 표시 합 니 다.
    만약 우리 가 python 을 사용 하여 정규 표현 식 정규 를 진행한다 면, 우 리 는 주로 몇 가지 절 차 를 거 친다.
  • 가방 가 져 오기
  • 수요 에 따라 정규 표현 식 을 지정 합 니 다
  • 사용자 정의 표현 식 컴 파일
  • 표현 식 에 따라 일치 합 니 다
  • 출력 결과
  • 1, 3, 5 는 상대 적 으로 쉬 운 부분 인 데 그 중에서 가장 어 려 운 부분 은 주로 두 단계 이다. 하 나 는 수요 에 맞 는 정규 표현 식 을 만 드 는 것 이 고 다른 하 나 는 어떻게 일치 하 는 지 하 는 것 이다.우 리 는 마지막 으로 출력 결 과 를 간단하게 소개 할 것 이다.
    3. 정규 표현 식 작성
    정규 표현 식 을 만 드 는 것 이 핵심 입 니 다. 우리 의 생각 에 맞 는 표현 식 을 어떻게 만 듭 니까?우 리 는 다음 두 부분 을 소개 하여 구축 합 니 다.
    그대로 있 는 단어 라 는 부분 은 우리 가 필요 로 하 는 것 이 아니 라 우리 가 필요 로 하 는 내용 의 중간 부분 만 남아 있다.그대로 있 는 단 어 는 그대로 베껴 쓰 고, 유 난 히 형식 을 늘 리 지 마라.
    일치 하 는 부분 을 추출 하고 싶 은 내용 을 정규 표현 식 으로 표현 합 니 다. 한 부분 은 우리 가 일치 하 는 문자 입 니 다. 예 를 들 어:
    \ w 는 알파벳 숫자 와 밑줄 이 일치 합 니 다 \ \ W 는 비 알파벳 숫자 와 밑줄 이 일치 합 니 다 \ \ s 는 임의의 공백 문자 와 일치 합 니 다. 값 은 [\ t \ r \ f] 와 같 습 니 다. \ S 는 임의의 비 빈 문자 와 일치 합 니 다 \ d 는 임의의 숫자 와 일치 합 니 다. \ D 는 임의의 비 숫자 와 일치 합 니 다 \ A 매 칭 문자열 시작 \ Z 매 칭 문자열 이 끝 납 니 다. 줄 이 바 뀌 기 전의 끝 문자열 만 일치 합 니 다. \ \z 일치 문자열 이 끝 났 습 니 다. \ G 는 완 료 된 위치 와 일치 합 니 다. \b. 단어 경계 와 일치 합 니 다. 즉, 단어 와 빈 칸 의 위 치 를 말 합 니 다.예 를 들 어 'er \ b' 는 'never' 의 'er' 와 일치 할 수 있 지만 'verb' 의 'er' 와 일치 할 수 없습니다. \B 는 단어 가 아 닌 경계 와 일치 합 니 다. 'r \ B '는' verb '의' er '와 일치 하지만' never '의' er '와 일치 할 수 없습니다.t, 등. 줄 바 꿈 문자 와 일치 합 니 다.탭 문자 와 일치 합 니 다.n 번 째 그룹의 내용 과 일치 합 니 다. \10. n 번 째 그룹의 내용 과 일치 합 니 다. 일치 하면.그렇지 않 으 면 8 진 문자 코드 의 표현 식 을 말 합 니 다.
    다른 하 나 는 일치 하 는 모드 입 니 다. 우리 가 어떻게 일치 하 는 지 결정 합 니 다.
    ^ 문자열 의 시작 $문자열 의 끝 과 일치 합 니 다.임의의 문자 와 일치 합 니 다. 줄 바 꿈 자 를 제외 하고 re. DOTALL 태그 가 지정 되 었 을 때 줄 바 꿈 자 를 포함 한 임의의 문자 와 일치 할 수 있 습 니 다.[...] 문 자 를 표시 하 는 데 사 용 됩 니 다. 단독 목록: [amk] 은 'a', 'm' 또는 'k' [^..] 에 없 는 문자 입 니 다. [^ abc] 는 a, b, c 를 제외 한 문자 와 일치 합 니 다.re * 0 개 이상 의 표현 식 과 일치 합 니 다.re + 1 개 이상 의 표현 식 과 일치 합 니 다.re? 앞의 정규 표현 식 에서 정 의 된 0 개 또는 1 개의 세 션 과 일치 합 니 다. 탐욕 적 이지 않 은 방식 re {n} 은 n 개의 앞 표현 식 과 정확하게 일치 합 니 다.예 를 들 어 o {2} 은 "Bob" 의 "o" 와 일치 할 수 없 지만 "food" 의 두 o 와 일치 할 수 있 습 니 다.re {n,} 은 n 개의 앞 표현 식 과 일치 합 니 다.예 를 들 어 o {2,} 은 "Bob" 의 "o" 와 일치 할 수 없 지만 "fooood" 의 모든 o 와 일치 할 수 있 습 니 다."o {1,}" 은 "o +" 와 같다."o {0,}" 은 "o *" 와 같다.re {n, m} 은 n 에서 m 회 까지 앞의 정규 표현 식 으로 정 의 된 세 션 과 일치 합 니 다. 탐욕 방식 a | b 는 a 또는 b (re) 와 일치 하 는 정규 표현 식 을 그룹 으로 나 누고 일치 하 는 텍스트 (? imx) 정규 표현 식 은 세 가지 선택 가능 한 표 지 를 포함 합 니 다: i, m 또는 x.괄호 안의 영역 에 만 영향 을 줍 니 다.(? - imx) 정규 표현 식 은 i, m 또는 x 로 고 를 닫 습 니 다.괄호 안의 영역 에 만 영향 을 줍 니 다.(?: re) 는 유사 (...) 하지만 한 그룹 (? imx: re) 을 표시 하지 않 습 니 다. 괄호 에 i, m, 또는 x 선택 표지 (? - imx: re) 를 사용 하지 않 습 니 다. 괄호 에 i, m, 또는 x 선택 표지 (? \ #...) 주석 을 사용 하지 않 습 니 다. (? = re) 앞에서 긍정 적 인 정의 부 호 를 사용 합 니 다.정규 표현 식 이 포함 되 어 있 으 면 현재 위치 가 성공 적 으로 일치 할 때 성공 하고 그렇지 않 으 면 실패 합 니 다.그러나 표현 식 이 시도 되 었 을 때 일치 하 는 엔진 이 전혀 향상 되 지 않 았 습 니 다.모드 의 나머지 부분 은 정의 문자 의 오른쪽 을 시도 해 야 합 니 다.(?! re) 앞 에 부정 정의 부 호 를 향 해.긍정 적 인 정의 와 반대;함 유 된 표현 식 이 문자열 의 현재 위치 와 일치 하지 않 을 때 성공 (? > re) 과 일치 하 는 독립 모드 로 거 슬러 올 라 가지 않 습 니 다.
    두 가 지 를 조합 하면 우리 가 원 하 는 결 과 를 완성 할 수 있 습 니 다. 비록 여기 서 많이 열거 되 었 지만 우리 가 자주 사용 하 는 것 은 바로 그 몇 가지 입 니 다. 정규 표현 식 의 간단 한 구분 은 정규 표현 식 을 원 문자, 반 의, 양사 와 게 으 름 한정 어로 나 눌 수 있 습 니 다.나 는 뒷부분 에서 실례 를 하나 제시 할 것 이다.정규 표현 식 을 작성 한 후에 아래 함 수 를 사용 하여 일치 하 는 템 플 릿 을 얻 습 니 다.
    re.compile(pattern[, flags])
    

    4. 일치 하 는 방식
    정규 표현 식 이 일치 하 는 방식 은 주로 3 가지 match, searchfindall 가 있다.영 어 를 알 면 차이 점 을 알 수 있 습 니 다. 여기 서 앞의 두 가 지 는 모두 단일 하 게 일치 하고 하나의 절차 만 일치 합 니 다. 일치 하 는 규칙 이 여러 개 있 으 면 첫 번 째 결 과 를 되 돌려 주 고 findall 후보 에 맞 는 모든 것 을 일치 시 킵 니 다.앞의 두 가지 차 이 는 match 처음부터 일치 해 야 한 다 는 것 이다. 즉, startwith 와 차이 가 많 지 않 은 효과 이 고 search 는 임 의 위치 에서 일치 할 수 있다 는 것 이다.
    다음은 세 가지 방법의 매개 변 수 를 살 펴 보 겠 습 니 다. 그 중에서 pattern 우리 에 게 제 정 된 정규 표현 식 입 니 다. string 우리 가 일치 해 야 할 문자열 입 니 다. flags 은 일치 하 는 패턴 을 표시 합 니 다.
    re.match(pattern, string, flags=0)
    re.search(pattern, string, flags=0)
    findall(string[, pos[, endpos]])
    

    그래서 우리 가 방식 을 선택 할 때 다음 과 같은 몇 가지 절차 가 있다.
  • 여러 개 일치 해 야 합 니까?네, 선택 findall
  • 처음부터 일치 해 야 합 니까?네, 선택 match
  • 일반적인 상황 에서 사용 search
  • 5. 일치 하 는 결과 보 여주 기
    일치 결과 전 시 는 주로 다음 과 같은 네 부분 으로 구성 되 어 있 습 니 다.
    group([group1,])                    ,            ,      group()   group(0);
    start([group])                          (          ),       0;
    end([group])+1),       0;
    span([group])      (start(group), end(group))

    예 를 들 어 아래 의 이 예 는 우리 가 이 네 부분 을 어떻게 호출 하 는 지 를 보 여 준다.
    >>>import re
    >>> pattern = re.compile(r'\d+')                    #           
    >>> m = pattern.match('one12twothree34four')        #     ,    
    >>> print m
    None
    >>> m = pattern.match('one12twothree34four', 2, 10) #  'e'       ,    
    >>> print m
    None
    >>> m = pattern.match('one12twothree34four', 3, 10) #  '1'       ,    
    >>> print m                                         #      Match   
    <_sre.SRE_Match object at 0x10a42aac0>
    >>> m.group(0)   #     0
    '12'
    >>> m.start(0)   #     0
    3
    >>> m.end(0)     #     0
    5
    >>> m.span(0)    #     0
    (3, 5)
    

    6. 간단 한 예 를 들다
    더 좋 고 직관 적 이 며 이해 하기 쉬 운 방법 은 다음 과 같다. 방금 사용 한 디지털 색인 과 비교 하면 모든 일치 하 는 내용 을 의미 화하 여 코드 를 더욱 쉽게 이해 할 수 있다.
    contactInfo = '  ( Nucleus (span 2 3) (rel2par span)'
    pattern=re.compile(r'(?P\w+) \(span (?P\w+) (?P\w+)\) \(rel2par (?P\w+)\)')
    match = pattern.search(contactInfo)
    print(match.group())  # Nucleus (span 2 3) (rel2par span)
    print(match.group("nuclearity"))  # Nucleus 
    print(match.group("start"))  # 2
    print(match.group("end"))  # 3
    print(match.group("relation"))  # span
    

    상술 한 예 에서 우 리 는 가장 직관 적 인 결 과 를 얻 을 수 있다. 우 리 는 이러한 결 과 를 우리 가 필요 로 하 는 데이터 구조 에 저장 하기 만 하면 된다.
    7. 기타 보충 지식
    7.1 자주 사용 하 는 형식 과 일치 합 니 다.
    만약 우리 가 자주 사용 하 는 형식, 예 를 들 어 이름, 신분증, 메 일, 전화번호 등 과 일치 해 야 한다 면, 모두 기 존의 도구 가 직접 생 성 되 고, 우리 가 다시 작성 할 필요 가 없다.
    7.2 일치 하 는 중국어 문자
    만약 당신 이 단지 몇 개의 중국어 한자 와 일치 하고 싶다 면, 아래 의 정규 표현 식 을 사용 하 십시오.
    [\u4E00-\u9FA5\\s]+[\u4E00-\u9FA5]+[\u4E00-\u9FA5]     
    
    

    여기에 더 완전한 중문 자 와 일치 하 는 방법 도 있다.
    7.3 일부 특수 기호 와 일치
    정규 표현 식 의 각종 괄호 의 용도 와 괄호 의 매 칭 을 어떻게 하 는 지.

    좋은 웹페이지 즐겨찾기