Python 정규식

高洛峰
高洛峰원래의
2016-11-23 14:07:271040검색

정규식은 문자열이 특정 패턴과 일치하는지 쉽게 확인하는 데 도움이 되는 특수 문자 시퀀스입니다. Python은 버전 1.5부터 Perl 스타일 정규식 패턴을 제공하는 re 모듈을 추가했습니다.

re 모듈은 Python 언어에 완전한 정규식 기능을 제공합니다.

컴파일 함수는 패턴 문자열과 선택적 플래그 인수를 기반으로 정규식 개체를 생성합니다. 이 객체에는 정규식 일치 및 교체를 위한 일련의 메서드가 있습니다.

re 모듈은 패턴 문자열을 첫 번째 인수로 사용하는 이러한 메서드와 동일한 함수도 제공합니다.

이 장에서는 Python에서 일반적으로 사용되는 정규식 처리 함수를 주로 소개합니다.

re.match 함수

re.match는 문자열의 시작 부분부터 패턴을 일치시키려고 시도합니다.

함수 구문:

re.match(pattern, string, flags=0)

함수 매개변수 설명:

매개변수

설명

정규 표현식과 일치하는 패턴

string 일치시킬 문자열입니다.

flags 플래그는 대소문자 구분, 여러 줄 일치 등 정규식의 일치 방법을 제어하는 ​​데 사용됩니다.

re.match 메소드는 일치에 성공하면 일치하는 객체를 반환하고, 그렇지 않으면 None을 반환합니다.

group(num) 또는 groups() 일치 개체 함수를 사용하여 일치하는 표현식을 얻을 수 있습니다.

매칭 객체 방식

설명

group(num=0) 전체 표현식이 일치하는 문자열, group( )는 한 번에 여러 그룹 번호를 입력할 수 있으며, 이 경우 해당 그룹에 해당하는 값이 포함된 튜플을 반환합니다.

groups() 1부터 에 포함된 그룹 번호까지 모든 그룹 문자열을 포함하는 튜플을 반환합니다.

인스턴스:

#!/usr/bin/python

다시 가져오기

line = "고양이는 개보다 똑똑하다"

matchObj = re.match( r'(.*) are (.*?) .*', line, re .M|re.I)

if matchObj:

print "matchObj.group() : ", matchObj.group()

print "matchObj.group(1) : ", matchObj.group(1)

인쇄 "matchObj.group(2) : ", matchObj.group(2)

else:

print "No match!!"

위 예제의 실행 결과는 다음과 같습니다.

matchObj.group() : 고양이는 개보다 똑똑합니다

matchObj.group(1) : 고양이

matchObj.group(2) : 더 똑똑합니다

re.search 방법

re.match는 문자열의 시작 부분부터 패턴을 일치시키려고 시도합니다.

함수 구문:

re.search(pattern, string, flags=0)

함수 매개변수 설명:

매개변수

설명

정규 표현식과 일치하는 패턴

string 일치시킬 문자열입니다.

flags 플래그는 대소문자 구분, 여러 줄 일치 등 정규식의 일치 방법을 제어하는 ​​데 사용됩니다.

일치에 성공하면 re.search 메서드는 일치하는 객체를 반환하고, 그렇지 않으면 None을 반환합니다.

group(num) 또는 groups() 일치 개체 함수를 사용하여 일치하는 표현식을 얻을 수 있습니다.

매칭 객체 방식

설명

group(num=0) 전체 표현식이 일치하는 문자열, group( )는 한 번에 여러 그룹 번호를 입력할 수 있으며, 이 경우 해당 그룹에 해당하는 값이 포함된 튜플을 반환합니다.

groups() 1부터 에 포함된 그룹 번호까지 모든 그룹 문자열을 포함하는 튜플을 반환합니다.

인스턴스:

#!/usr/bin/python

다시 가져오기

line = "고양이는 개보다 똑똑하다";

matchObj = re.match( r'(.*)는 (.*?) .*', line, re.M|re.I)

if matchObj:

print "matchObj.group() : ", matchObj.group()

print "matchObj.group(1) : ", matchObj.group(1)

print "matchObj.group(2) : ", matchObj.group(2)

else:

print "No match!!"

위 예제의 실행 결과는 다음과 같습니다.

matchObj.group() : 고양이는 개보다 똑똑합니다

matchObj.group(1) : 고양이

matchObj.group(2) : 더 똑똑합니다

re.match와 re.search의 차이점

re.match는 문자열의 시작 부분만 일치합니다. 문자열의 시작 부분이 정규 표현식과 일치하지 않으면 일치가 실패하고 함수는 일치 항목을 찾을 때까지 전체 문자열을 일치시킵니다.

인스턴스:

#!/usr/bin/python

다시 가져오기

line = "고양이는 개보다 똑똑하다";

matchObj = re.match( r'dogs', line, re.M|re.I)

if matchObj:

print "match --> matchObj.group() : ", matchObj.group()

else:

print "일치하지 않음 !!"

matchObj = re.search( r'dogs', line, re.M|re.I)

if matchObj:

print "search --> matchObj.group() : ", matchObj.group()

else:

print "일치하지 않음!!"

위의 예시 실행 결과는 다음과 같습니다.

일치하지 않습니다!!

검색 -- > matchObj .group() : dogs

검색 및 교체

Python의 re 모듈은 문자열 항목에서 일치 항목을 교체하기 위한 re.sub를 제공합니다.

구문:

re.sub(pattern, repl, string, max=0)

반환된 문자열은 문자열에서 가장 왼쪽의 반복되지 않는 RE 일치 항목으로 대체됩니다. 패턴을 찾을 수 없으면 문자는 변경되지 않은 채 반환됩니다.

선택적 매개변수 count는 패턴 일치 후 최대 대체 수입니다. count는 음수가 아닌 정수여야 합니다. 기본값은 모든 일치 항목을 바꾸는 0입니다.

인스턴스:

#!/usr/bin/python

다시 가져오기

phone = "2004-959-559 # 전화번호입니다"

# Python 스타일 댓글 삭제

num = re.sub(r' #.*$', "", 전화)

print "Phone Num : ", num

# 숫자 이외의 모든 항목 제거

num = re.sub(r'D', "",phone)

print "Phone Num : ", num

위의 예 실행 결과는 다음과 같습니다.

전화번호 : 2004-959-559

전화번호 : 2004959559

정규식 수정자 - 선택적 플래그

정규식에는 일치하는 패턴을 제어하기 위한 여러 선택적 플래그 수정자가 포함될 수 있습니다. 수정자는 선택적 플래그로 지정됩니다. 여러 플래그는 비트별 OR(|)로 지정할 수 있습니다. 예를 들어 re.I | re.M은 I 및 M 플래그로 설정됩니다.

Modifier

Description

re .I 대소문자를 구분하지 않는 일치

re.L 로케일 인식 일치

re.M ^ 및 $에 영향을 미치는 여러 줄 일치

re.S 원인 . 개행 문자를 포함한 모든 문자와 일치합니다.

re.U는 유니코드 문자 집합에 따라 문자를 구문 분석합니다. 이 플래그는 w, W, b, B에 영향을 미칩니다.

re.X 이 플래그를 사용하면 보다 유연한 형식을 제공하여 정규식 작성을 더 쉽게 이해할 수 있습니다.

정규 표현식 패턴

패턴 문자열은 특수 구문을 사용하여 정규 표현식을 나타냅니다.

문자와 숫자는 그 자신을 나타냅니다. 정규식 패턴의 문자와 숫자는 동일한 문자열과 일치합니다.

대부분의 문자와 숫자 앞에 백슬래시가 있으면 다른 의미를 갖습니다.

구두점은 이스케이프된 경우에만 일치하며, 그렇지 않은 경우에는 특별한 의미를 나타냅니다.

백슬래시 자체는 백슬래시로 이스케이프 처리해야 합니다.

정규식에는 일반적으로 백슬래시가 포함되므로 원시 문자열을 사용하여 이를 표현하는 것이 좋습니다. 패턴 요소(예: '//t'에 해당하는 r'/t')는 해당 특수 문자와 일치합니다.

다음 표에는 정규식 패턴 구문의 특수 요소가 나열되어 있습니다. 패턴을 사용하고 선택적 플래그 인수를 제공하면 일부 패턴 요소의 의미가 변경됩니다.

패턴

설명

^ 문자열의 시작과 일치

$ 문자열의 끝과 일치 문자열 .

. re.DOTALL 플래그가 지정되면 개행 문자를 제외한 모든 문자와 일치합니다.

[...] 별도로 나열된 문자 그룹을 나타내는 데 사용됩니다. [amk]는 'a', 'm' 또는 'k'와 일치합니다.

[^...] Not []의 사용 가능한 문자: [^abc]는 a, b, c를 제외한 문자와 일치합니다.

re* 0개 이상의 표현식과 일치합니다.

re+ 하나 이상의 표현식과 일치합니다.

re? 이전 정규 표현식으로 정의된 0 또는 1개의 조각과 일치, 탐욕 모드

re{ n}

re{ n,} n 이전 표현식 모드와 정확히 일치합니다.

re{ n, m} 이전 정규식으로 정의된 n에서 m번의 조각과 일치, 욕심 많은 방식

a| b a 또는 b 일치

(re ) G 괄호 안의 표현식과 일치하며 그룹

(?imx)도 나타냅니다. 정규식에는 i, m 또는 x의 세 가지 선택적 플래그가 포함되어 있습니다. 괄호 안의 영역에만 영향을 미칩니다.

(?-imx) i, m 또는 x 선택적 플래그를 끄는 정규식입니다. 괄호 안의 영역에만 영향을 미칩니다.

(?: re) (...)와 유사하지만 그룹을 나타내지 않습니다.

(?imx: re) 괄호 안에 i, m 또는 x 선택적 플래그 사용

(?-imx: re) 괄호 안에 i, m, x 선택적 플래그를 사용하지 마세요.

(?#...) 댓글

(?= re ) 앞으로 양수 구분 기호. ... 로 표시된 포함된 정규식이 현재 위치와 성공적으로 일치하면 성공하고, 그렇지 않으면 실패합니다. 그러나 포함된 표현식을 시도한 후에는 일치 엔진이 전혀 개선되지 않으며 패턴의 나머지 부분은 여전히 ​​구분 기호의 오른쪽을 시도해야 합니다.

(?! re) 음수 구분 기호를 전달합니다. 양수 구분 기호와는 반대로, 포함된 표현식이 문자열의 현재 위치에서 일치할 수 없으면 성공합니다.

(?> re) 독립적인 패턴과 일치하여 역추적을 제거합니다.

w는 영숫자 문자와 일치합니다.

W는 영숫자가 아닌 문자와 일치합니다.

s는 모든 공백 문자와 일치합니다.

S는 모든 공백 문자와 일치합니다. - 영숫자 문자

d는 [0-9]에 해당하는 모든 숫자와 일치합니다.

D는 숫자가 아닌 모든 것과 일치합니다.

A는 문자열의 시작 부분과 일치합니다.

Z는 문자열의 끝과 일치합니다. 줄 바꿈이 있는 경우 줄 바꿈 이전의 문자열 끝만 일치합니다. c

z 문자열의 끝을 일치

G 마지막 일치가 완료된 위치를 일치시킵니다.

b 단어와 공백 사이의 위치를 ​​나타내는 단어 경계와 일치합니다. 예를 들어, 'erb'는 "never"의 'er'와 일치하지만 "동사"의 'er'와는 일치하지 않습니다.

B 비단어 경계와 일치합니다. 'erB'는 "동사"의 'er'와 일치하지만 "never"에서는 일치하지 않습니다.

n, t 등. 개행 문자와 일치합니다. 탭 문자와 일치합니다.

1...9는 n번째 그룹의 하위 표현식과 일치합니다.

10 일치하는 경우 n번째 그룹의 하위 표현식과 일치합니다. 그렇지 않으면 8진 문자 코드의 표현을 참조합니다.

정규식 예

문자 일치

설명

python "python"과 일치합니다.

문자 클래스

인스턴스

설명

[Pp]ython 일치 "Python" 또는 "python"

rub[ye] "ruby" 또는 "rube"와 일치

[aeiou] 대괄호 안의 문자와 일치

[ 0- 9]는 모든 숫자와 일치합니다. [0123456789]

[a-z] 모든 소문자와 일치

[A-Z] 모든 대문자와 일치

[a-zA-Z0-9] 모든 문자 및 숫자

[^aeiou] aeiou 문자를 제외한 모든 문자

[^0-9] 숫자를 제외한 문자와 일치

특수문자 클래스

인스턴스

설명

. "n"을 제외한 모든 단일 문자와 일치합니다. 'n'을 포함한 모든 문자를 일치시키려면 '[.n]'과 같은 패턴을 사용하십시오.

d는 숫자와 일치합니다. [0-9]와 동일합니다.

D는 숫자가 아닌 문자와 일치합니다. [^0-9]와 동일합니다.

s는 공백, 탭, 폼 피드 등을 포함한 모든 공백 문자와 일치합니다. [fnrtv]와 동일합니다.

S는 공백이 아닌 모든 문자와 일치합니다. [^ fnrtv]와 동일합니다.

w 밑줄을 포함한 모든 단어 문자와 일치합니다. '[A-Za-z0-9_]'와 동일합니다.

W는 단어가 아닌 문자와 일치합니다. '[^A-Za-z0-9_]'와 동일합니다.


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