> 백엔드 개발 > 파이썬 튜토리얼 > Python 정규 표현식

Python 정규 표현식

高洛峰
풀어 주다: 2016-10-19 16:37:06
원래의
1264명이 탐색했습니다.

정규 표현식은 복잡한 문자열을 검색하고 바꾸고 구문 분석하는 강력하고 표준적인 방법입니다. Python의 모든 정규 표현식은 re 모듈에 있습니다.

1개의 일반적인 일치

^문자열의 시작과 일치

$문자열의 끝과 일치

b단어의 경계와 일치

d는 모든 숫자와 일치

D는 숫자가 아닌 모든 문자와 일치

x?는 선택적 x와 일치(1 또는 0 x 문자와 일치)

x* x와 일치

x 0회 이상 + x와 일치

x{n,m} 1회 이상 최소 n회 최대 m회 x

(a| b |c)는 a와 일치하거나 b와 일치하거나 c와 일치합니다.

(x)는 일반적으로 re.search 함수에서 반환된 개체의 groups() 함수를 사용하여 메모리 그룹을 얻을 수 있습니다. Value

2 범용

#-------------------------------------------------------------------------------
# coding:        utf-8
# Purpose:正则表达式
#
# Author:      zdk
#
# Created:     26/02/2013
# Copyright:   (c) zdk 2013
#-------------------------------------------------------------------------------
  
import re
if __name__ == '__main__':
    addr = "100 BROAD ROAD APT.3"
    print(re.sub("ROAD","RD",addr)) # 100 BRD RD APT.3
    print(re.sub(r"\bROAD\b","RD",addr)) # 100 BROAD RD APT.3
    pattern = ".*B.*(ROAD)?"
    print(re.search(pattern,"ROAD")) #None
    print(re.search(pattern,"B")) #<_sre.SRE_Match object at 0x0230F020><span style="background-color:#FAFAFA;font-family:Monaco, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, Consolas, &#39;Courier New&#39;, monospace;font-size:1em;line-height:1.5;"> </span>
로그인 후 복사

(1) re.sub("ROAD","RD",addr) re.sub 함수를 사용하여 문자열 addr을 검색하여 표현식 "ROAD" 공식에서

를 "RD"로 바꾸세요. (2) re.sub(r"bROADb","RD",addr), "b"는 Python에서 "단어 경계"를 의미합니다. 문자 ""는 문자열에서 이스케이프되어야 하며 이는 매우 번거로울 수 있으므로 Python은 접두사 r을 사용하여 문자열의 모든 문자가 이스케이프되지 않음을 나타냅니다.

(3) re.search(pattern, "ROAD") re 모듈에는 검색 기능이 있습니다. 이 함수에는 두 개의 매개변수가 있습니다. 하나는 정규식이고 다른 하나는 문자열입니다. 이 일치하는 개체는 하나의 메서드로 설명할 수 있으며, 일치하는 항목이 없으면 None이 반환됩니다.

느슨한 정규식 3개

위 내용은 모두 "compact" 형식의 표현으로, 지금은 표현의 의미가 명확하다고 해도 반드시 그럴 것이라는 보장은 없습니다. 몇 달이 지나도 읽을 수 있다는 것을 기억하세요. 따라서 Python에서는 소위 느슨한 정규식을 사용하여 인라인 문서의 요구 사항을 충족할 수 있으며 다음 두 가지 측면에서 일반 표현식과 두 가지 주요 차이점이 있습니다.

공백 문자를 무시합니다. 공백, 탭 및 캐리지 리턴은 자체적으로 일치하지 않습니다(느슨한 정규식에서 공백 문자를 일치시키려면 앞에 백슬래시 문자를 추가하여 이스케이프할 필요가 없습니다)

무시 댓글. 일반 Python 코드와 마찬가지로 주석은 # 기호로 시작하고 줄 끝에서 끝납니다.

#松散带有内联注释的正则表达式
    pattern = """
    ^   # begin of string
    M{0,3} # 0 to 3 M
    (CM|CD|D?C{0,3}) #CM or CD or D or D 0 to 3 C
    $   #end of string
    """
    print(re.search(pattern,"MCM",re.VERBOSE)) #<_sre.SRE_Match object at 0x021BAF60>
    print(re.search(pattern,"M99",re.VERBOSE)) #None
로그인 후 복사

(1) 느슨한 정규 표현식을 사용할 때 가장 중요한 점은 re 모듈의 상수인 추가 매개변수 re.VERBOSE를 전달해야 한다는 것입니다. 이는 일치해야 함을 나타냅니다. 정규식은 느슨한 정규식입니다. 패턴 공백과 주석은 무시되지만 동시에 가독성이 향상됩니다.

4개 사례 연구: 전화번호 구문 분석

은 다음 전화번호와 일치해야 합니다.

800-555-1212

800 555 1212

800.555.1212

(800)555-1212

1-800-555-1212

800-555-1212-1234

800 -555-1212x1234

800-555-1212 ext.1234

work 1-(800) 555,1212 #1234

다양한 형식이 있습니다. 800은 지역번호, 국번은 555, 전화번호 나머지 숫자는 1212입니다. 내선번호가 있는 분들은 내선번호가 1234라는 것을 알아두셔야 합니다

phonePattern = re.compile(r&#39;&#39;&#39;
    # don&#39;t match beginging of string
(\d{3}) # 3 digits
\D*     #any number of non-digits
(\d{3}) # 3 digits
\D*     #any number of non-digits
(\d{4}) # 4 digits
\D*     #any number of non-digits
(\d*)   #any number of digits
&#39;&#39;&#39;,re.VERBOSE)
print(phonePattern.search(&#39;work 1-(800)555.1212 #1234&#39;).groups()) #(&#39;800&#39;, &#39;555&#39;, &#39;1212&#39;, &#39;1234&#39;)
로그인 후 복사

print(phonePattern.search('work 1-( 800)555.1212 #1234').groups()) #('800', '555', '1212', '1234')

(1) 느슨한 정규 표현식은 위와 같습니다. 먼저 3개의 숫자 지역 코드(첫 번째 문자부터 시작할 필요는 없으므로 ^는 사용되지 않음)와 일치한 다음 숫자가 아닌 문자와 일치하고 3개의 숫자 트렁크 번호와 일치한 다음 일치합니다. 숫자가 아닌 문자를 임의 개수로 일치시킨 다음 4 숫자와 일치하고 숫자가 아닌 문자를 임의 개수로 일치시킨 다음 숫자 내선 번호를 임의 개수로 일치시킨 다음 그룹 기능을 사용하여 그룹화하여 올바른 전화번호를 가져옵니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿