>  기사  >  백엔드 개발  >  Python의 정규식에 대한 지식 요약 및 공유

Python의 정규식에 대한 지식 요약 및 공유

黄舟
黄舟원래의
2017-09-23 11:34:261354검색

이 글에서는 Python 정규식에 대한 기본 지식을 소개합니다. 이 글의 내용에는 효율적인 정규식을 작성하는 방법과 정규식을 최적화하는 방법이 포함되어 있지 않습니다. 이러한 주제에 대한 다른 튜토리얼을 확인하세요.

1. 정규식 구문

 1.1 문자 및 문자 클래스
 1 특수 문자: .^$?+*{}[]()|
  리터럴 값을 사용하려면 위의 특수 문자를 이스케이프해야 합니다.
  2 문자 클래스
   1. [] 안에 포함된 하나 이상의 문자를 문자 클래스라고 합니다. 문자 클래스가 일치 시 수량자를 지정하지 않으면 그 중 하나만 일치합니다.
   2. 문자 클래스 내에서 범위를 지정할 수 있습니다. 예를 들어 [a-zA-Z0-9]는 a~z, A~Z, 0~9의 모든 문자를 나타냅니다.
   3. 왼쪽 대괄호 뒤에는 ^([^0-9]와 같은 문자 클래스를 부정한다는 것은 숫자가 아닌 모든 문자와 일치할 수 있음을 의미합니다.)
4. 문자 클래스 내에서 를 제외한 다른 특수 문자는 더 이상 특별한 의미를 가지지 않으며 모두 리터럴 값을 나타냅니다. 첫 번째 위치에 배치된 ^는 부정을 나타내고, 다른 위치에 배치된 ^ 자체는 ^ 자체를 나타내며, 중간에 배치된 -는 범위를 나타내고, 문자 클래스의 첫 번째 문자로 배치된 것은 - 자체를 나타냅니다.

   5. d s w
  3 단축 방법
  과 같이 문자 클래스 내에서 단축 방법을 사용할 수 있습니다. re.DOTALL 플래그가 있으면 개행 문자를 제외한 모든 문자와 일치합니다. 문자
   d는 유니코드 숫자와 일치합니다. re.ASCII가 포함된 경우 0-9와 일치합니다.
   D는 숫자가 아닌 유니코드와 일치합니다.
 s는 유니코드 공백과 일치하고 re.ASCII가 포함된 경우 tnrfv의 1과 일치합니다
  S는 유니코드 비-와 일치합니다 공백
 w는 유니코드 단어 문자와 일치하고, re.ascii가 포함된 경우 [a-zA-Z0-9_] 중 하나와 일치합니다.
   W는 유니코드 비모나드 문자

 1.2 수량자
 1과 일치합니다. ? 1번
  2. * 일치 이전 문자가 0번 이상 일치합니다
3. + 이전 문자와 1번 이상 일치합니다.
4. {m}은 이전 표현식과 m번 일치합니다.
5. {m,}는 이전 문자와 일치합니다. 표현식은 최소 m번 이상
6. {,n}은 이전 정규 표현식과 최대 n번 일치합니다
  7. {m,n}은 이전 정규 표현식과 최소 m번, 최대 n번 일치합니다
   참고:
   위 수량자 욕심이 없는 모드로 변경하려면 ? 1.3 그룹 및 캡처

1 ()의 역할:

1. 캡처 추가 처리를 위해 ()에 있는 정규 표현식의 내용을 다음과 같이 하면 이 괄호의 캡처 기능을 끌 수 있습니다. ?: 왼쪽 괄호 뒤
   2. 정규 표현식의 일부를 결합하여 수량자 또는 |
  2 반응은 다음을 참조합니다. 이전 ()에 캡처 된 내용 :
1. 그룹 번호를 통한 후면 참조
| 왼쪽에 캡처 한 컨텐츠가 캡처 된 컨텐츠가 왼쪽을 따를 수 있습니다. 괄호를 ?P으로 묶고, 꺾쇠괄호 안에 그룹 이름을 넣은 다음 (?P=name)으로 참조합니다. 앞서 캡처한 내용입니다. (?Pw+)s+(?P=word)와 같이 반복되는 단어를 일치시킵니다.
3 참고:
역참조는 문자 클래스 []에서 사용할 수 없습니다.

  1.4 Assertions and Markers
   Assertions은 어떤 텍스트와도 일치하지 않지만 Assertion이 위치한 텍스트에만 특정 제약 조건을 적용합니다.
  1 일반적으로 사용되는 Assertions:
  1. b는 단어의 경계와 일치하며 문자 클래스에 배치됩니다. []는 백스페이스를 나타냅니다.
   2. B는 ASCII 태그의 영향을 받는 비단어 경계와 일치합니다
  3. A는 처음에 일치합니다
  4. ^는 처음에 일치하며, MULTILINE 플래그가 있는 경우 각 개행 문자 뒤에 일치합니다
5. Z는 끝에서 일치합니다
   6. $는 끝에서 일치합니다. MULTILINE 플래그가 있으면 각 개행 앞에 일치합니다.
   7. (?=e) 긍정적 예측
   8. (?!e) 부정적 예측
   9 .(?<= e) 긍정적인 룩백
   10.(?  2 룩백에 대한 설명
                               voy : exp1(?=exp2   )                                     ulateleg 관찰(? exp1 이전의 내용은 exp2와 일치할 수 없습니다

그러나 hello 뒤에는 world가 와야 합니다. 정규식은 "hello wangxing" 및 "hello world"와 일치하는 데 사용되는 "(hello)s+(?=world)"와 같이 작성할 수 있습니다. 후자의 hello

 1.5 조건 일치

   (?(id)yes_exp|no_exp): id에 해당하는 하위 표현식이 내용과 일치하면 yes_exp와 일치하고, 그렇지 않으면 no_exp


 1.6 정규식 플래그

 1과 일치합니다. 정규식 플래그에는 두 가지 종류가 있습니다. 사용 방법

1. 플래그 매개변수를 컴파일 메소드에 전달하여 re.compile(r"#[da-f]{6과 같이 여러 플래그에 대해 | 분할 메소드를 사용합니다. }b", re.IGNORECASE|re.MULTILINE)
   2. (?ms)#[da-z]{6}와 같이 정규식 앞에 (?flag)를 추가하여 정규식에 플래그를 추가합니다. b
  2. 일반적으로 사용되는 플래그
  re.A 또는 re .ASCII이므로 b B s S w W d D는 모두 문자열이 다음과 같다고 가정합니다. 문자열이 ASCII라고 가정
    re.I 또는 re.IGNORECASE가 정규식을 만듭니다. 대소문자 무시
   re.M 또는 re.MULTILINE 여러 줄 일치. 각 ^는 각 캐리지 리턴 뒤에 일치하고 각 $는 각 캐리지 리턴 앞에서 일치합니다.
   re.S 또는 re.DOTALL을 사용하면 캐리지를 포함한 모든 문자와 일치할 수 있습니다. return
   re.X 또는 re.VERBOSE 정규 표현식에 사용할 수 있습니다. 표현식은 여러 줄에 걸쳐 있으며 주석도 추가할 수 있지만 기본 공백은 더 이상 해석되지 않으므로 공백은 s 또는 [ ]로 표시해야 합니다. 예:
    re.compile(r"""
        [^>]*? # src의 속성이 아님
    src= #src 속성의 시작
    ( ?:
     (?P["']) #왼쪽따옴표
   (?P[^1>]+?) #사진 이름
       (?P=quote) #          ",re.VERBOSE| re.IGNORECASE)


2. Python 정규식 모듈

2.1 정규식에는 문자열 처리를 위한 네 가지 주요 기능이 있습니다.

1. 문자열이 정규식의 구문을 준수하는지 확인하며 일반적으로 true를 반환합니다. or false
  2. 정규식을 얻어서 문자열에서 요구사항에 맞는 텍스트를 추출합니다

  3. 검색 문자열에서 정규식에 맞는 텍스트를 바꾸고 해당 문자열로 바꿉니다

  4. 정규식을 사용하여 문자열을 분할합니다


  2.2 Python의 re 모듈에서 정규식을 사용하는 두 가지 방법

   1. re.compile(r, f) 메소드를 사용하여 정규식 객체를 생성한 후 해당 메소드를 호출합니다. 정규식 개체를 생성한 후 여러 번 사용할 수 있다는 장점이 있습니다. 2. re 모듈에는 정규식 개체의 각 개체 메서드에 해당하는 모듈 메서드가 있습니다. 2.3 정규식 개체의 일반적인 방법은 정규식 문자열입니다.

  1. rx.findall(s,start, end):
   목록을 반환합니다. 정규식에 그룹화가 없으면 목록에 일치하는 모든 내용이 포함됩니다.
   정규식에 그룹화가 있으면 목록은 각각입니다. of 요소는 하위 그룹에서 일치하는 내용을 포함하는 튜플이지만 전체 정규 표현식과 일치하는 내용을 반환하지 않습니다
  2. rx.finditer(s, start, end):
   반복 가능한 객체를 반환합니다
  반복 가능한 객체를 생성하고 매번 일치하는 객체를 반환합니다. 일치하는 객체의 group() 메서드를 호출하여 지정된 그룹과 일치하는 콘텐츠를 볼 수 있습니다. 0은 전체 정규 표현식과 일치하는 콘텐츠를 나타냅니다.
   3. rx.search( s , start, end):
     일치하는 개체를 반환합니다. 일치하는 항목이 없으면 None을 반환합니다.
    검색 방법은 한 번만 일치하고 중지되며 나중에는 계속 일치하지 않습니다.
   4. rx.match(s, start, end):
   정규식이 문자열의 시작 부분과 일치하면 일치하는 객체가 반환되고, 그렇지 않으면 None
  5.rx.sub(x, s, m):
    문자열을 반환합니다. 일치하는 각 위치를 x로 바꾸고 대체된 문자열을 반환합니다. m을 지정하면 최대 m번 대체됩니다. x의 경우 /i 또는 /g id를 사용할 수 있으며 캡처된 콘텐츠를 참조하는 그룹 이름 또는 번호일 수 있습니다.
   x 모듈 메소드 re.sub(r, x, s, m)에서 함수를 사용할 수 있습니다. 이때 캡처된 콘텐츠를 이 함수를 통해 푸시하여 처리한 다음 일치하는 텍스트를 바꿀 수 있습니다.
  6. rx.subn(x, s, m):
    re.sub() 메서드와 동일하지만 차이점은 튜플을 반환한다는 것인데, 그 중 하나는 결과 문자열이고, 하나는 튜플의 개수입니다. 교체.
7. rx.split(s, m): 문자열 분할
                                                         you in in in intale 목록의 각 두 분할 중간은 목록의 일부로 사용됩니다. 예:
   rx = re.compile(r "(d)[a-z]+(d)")
   s = "ab12dk3klj8jk9jks5"
   결과 = rx.split(s)
    반환 ['ab1', '2', '3', 'klj', '8' , '9', 'jks5']
   8. rx.flags(): 정규식 컴파일 시 설정되는 플래그
  9. rx.pattern(): 정규식 컴파일 시 사용되는 문자열


 2.4 일치하는 객체의 속성 및 방법


 01.m.group(g, ...)

   반환 번호 또는 그룹 이름 일치 가져오는 내용, 기본값 또는 0은 전체 표현식과 일치하는 내용을 나타냅니다. 여러 개를 지정하면 튜플이 반환됩니다. 02. m.groupdict(기본값) 사전을 반환합니다. 사전의 키는 명명된 모든 그룹의 그룹 이름이고, 값은 명명된 그룹이 캡처한 내용입니다. 기본 매개변수가 있는 경우 해당 그룹에 참여하지 않는 그룹의 기본값으로 사용됩니다. 어울리는.

  03.m.groups(기본값)
   튜플을 반환합니다. 1부터 시작하여 콘텐츠를 캡처하는 모든 하위 그룹을 포함합니다. 기본값을 지정하면 이 값은 콘텐츠를 캡처하지 않는 그룹의 값으로 사용됩니다
  04.m.lastgroup()
   가장 높은 숫자를 가진 캡처 그룹 콘텐츠와 일치하는 이름, 이름이 없거나 사용된 이름이 없으면 None을 반환합니다(일반적으로 사용되지 않음)
  05.m.lastindex()
  콘텐츠와 일치하는 가장 높은 번호의 캡처 그룹 번호, 그렇지 않은 경우, 없음을 반환합니다.
  06.m.start(g):
   현재 일치하는 개체의 하위 그룹은 문자열의 해당 위치에서 일치됩니다. 현재 그룹이 일치에 참여하지 않으면 -1이 반환됩니다
  07.m.end( g)
    현재 일치 객체의 하위 그룹화는 문자열의 해당 위치에서 종료됩니다. 현재 그룹이 일치에 참여하지 않으면 -1이 반환됩니다. 08. m.span()
   내용이 m인 튜플을 반환합니다. start(g) 및 m.end(g)의 반환 값
  09.m.re()
  이 일치 개체를 생성하는 정규 표현식
  10.m.string()
  일치 또는 일치 검색을 위해 전달된 문자열
 11.m.pos()
    검색 시작 위치입니다. 즉, 문자열의 시작 또는 start로 지정한 위치(일반적으로 사용되지 않음)
  12.m.endpos()
   검색의 끝 위치입니다. 즉, 문자열의 끝 위치, 또는 end로 지정되는 위치(일반적으로 사용되지 않음)


  2.5 요약

  1. 정규식 일치 함수의 경우 Python에는 true와 false를 반환하는 메서드가 없지만 일치 또는 검색 메서드의 반환 값이 None인지 여부로 판단할 수 있습니다
  2. 정규식 검색 함수의 경우, 한 번만 검색하는 경우 검색 또는 일치 메서드에서 반환된 일치 개체를 사용하여 얻을 수 있습니다. 여러 번 검색하는 경우 반복 액세스를 위해 finditer 메서드에서 반환된 반복 가능한 개체를 사용할 수 있습니다. 3. 정규식 대체 함수의 경우. , 정규식 객체의 sub 또는 subn을 사용할 수도 있고, re 모듈 메소드 sub 또는 subn을 통해 구현할 수도 있습니다. 차이점은 모듈의 sub 메소드의 대체 텍스트를 함수를 사용하여 생성할 수 있다는 것입니다.
4. 정규식 분할 기능의 경우 정규식 개체 분할 방법을 사용할 수 있습니다. 정규식 개체를 그룹화하면 그룹에서 캡처한 콘텐츠도 반환 목록에 배치됩니다

위 내용은 Python의 정규식에 대한 지식 요약 및 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.