Python-정규식

정규 표현식 이 일치하거나 패턴에서 개최 특수 구문을 사용하여 다른 문자열이나 문자열의 집합을 찾는 데 도움이 문자의 특별한 순서입니다. 정규식은 UNIX 세계에서 널리 사용됩니다.

Python 모듈 rePython에서 Perl과 유사한 정규식을 완벽하게 지원합니다. re 모듈은 정규식을 컴파일하거나 사용하는 동안 오류가 발생하면 예외 re.error를 발생시킵니다.

정규 표현식을 처리하는 데 사용되는 두 가지 중요한 함수를 다룰 것입니다. 그러나 먼저 작은 것 : 다양한 문자가 있으며 정규 표현식에서 사용할 때 특별한 의미를 갖습니다. 정규식을 다루는 동안 혼동을 피하기 위해 원시 문자열을 다음과 같이 사용합니다.r'expression'.

매치 기능

이 함수는 선택적 플래그 를 사용하여 RE 패턴문자열 에 일치 시키려고합니다 .

이 함수의 구문은 다음과 같습니다.

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

다음은 매개 변수에 대한 설명입니다.

Sr. 아니. 매개 변수 및 설명
1

pattern

일치시킬 정규식입니다.

2

string

이 문자열은 문자열의 시작 부분에있는 패턴과 일치하도록 검색됩니다.

flags

비트 OR (|)를 사용하여 다른 플래그를 지정할 수 있습니다. 이들은 아래 표에 나열된 수정 자입니다.

re.match의 함수가 반환 a를match 성공에 대한 반대, None실패시. 우리가 사용하는 그룹 (NUM) 또는 그룹 () 의 기능을match 일치하는 표현을 얻을 개체.

Sr. 아니. 일치 개체 방법 및 설명
1

group(num=0)

이 메서드는 전체 일치 (또는 특정 하위 그룹 번호)를 반환합니다.

2

groups()

이 메서드는 튜플에서 일치하는 모든 하위 그룹을 반환합니다 (없으면 비어 있음).

#!/usr/bin/python
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', 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() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

검색 기능

이 함수 는 선택적 플래그가 있는 문자열 내에서 RE 패턴 의 첫 번째 발생을 검색합니다 .

이 함수의 구문은 다음과 같습니다.

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

다음은 매개 변수에 대한 설명입니다.

Sr. 아니. 매개 변수 및 설명
1

pattern

일치시킬 정규식입니다.

2

string

이것은 문자열이며, 문자열의 어느 곳에서나 패턴과 일치하도록 검색됩니다.

flags

비트 OR (|)를 사용하여 다른 플래그를 지정할 수 있습니다. 이들은 아래 표에 나열된 수정 자입니다.

re.search의 함수가 반환 a를match 성공에 대한 반대, none실패시. 우리가 사용하는 그룹 (NUM) 또는 그룹 () 의 기능을match 일치하는 표현을 얻을 개체.

Sr. 아니. 일치 개체 방법 및 설명
1

group(num=0)

이 메서드는 전체 일치 (또는 특정 하위 그룹 번호)를 반환합니다.

2

groups()

이 메서드는 튜플에서 일치하는 모든 하위 그룹을 반환합니다 (없으면 비어 있음).

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print "searchObj.group() : ", searchObj.group()
   print "searchObj.group(1) : ", searchObj.group(1)
   print "searchObj.group(2) : ", searchObj.group(2)
else:
   print "Nothing found!!"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

매칭 대 검색

Python은 정규 표현식을 기반으로 두 가지 기본 연산을 제공합니다. match 문자열의 시작 부분에서만 일치를 확인하는 반면 search 문자열의 어느 곳에서나 일치하는지 확인합니다 (Perl이 기본적으로 수행하는 작업입니다).

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print "search --> searchObj.group() : ", searchObj.group()
else:
   print "Nothing found!!"

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

No match!!
search --> searchObj.group() :  dogs

검색 및 바꾸기

가장 중요한 것 중 하나 re 정규식을 사용하는 방법은 sub.

통사론

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

이 방법은 RE의 모든 항목 대체 패턴문자열REPL 하지 않는 한 모든 항목을 대체, 최대가 제공했다. 이 메서드는 수정 된 문자열을 반환합니다.

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print "Phone Num : ", num

위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.

Phone Num :  2004-959-559
Phone Num :  2004959559

정규식 수정 자 : 옵션 플래그

정규식 리터럴에는 일치의 다양한 측면을 제어하는 ​​선택적 수정자가 포함될 수 있습니다. 수정자는 선택적 플래그로 지정됩니다. 이전에 표시된대로 배타적 OR (|)를 사용하여 여러 수정자를 제공 할 수 있으며 다음 중 하나로 표시 될 수 있습니다.

Sr. 아니. 수정 자 및 설명
1

re.I

대소 문자를 구분하지 않는 일치를 수행합니다.

2

re.L

현재 로케일에 따라 단어를 해석합니다. 이 해석은 알파벳 그룹 (\ w 및 \ W)과 단어 경계 동작 (\ b 및 \ B)에 영향을줍니다.

re.M

$는 줄의 끝 (문자열의 끝뿐만 아니라)과 일치하고 ^는 모든 줄의 시작 (문자열의 시작뿐만 아니라)과 일치시킵니다.

4

re.S

마침표 (점)가 개행 문자를 포함하여 모든 문자와 일치하도록합니다.

5

re.U

유니 코드 문자 집합에 따라 문자를 해석합니다. 이 플래그는 \ w, \ W, \ b, \ B의 동작에 영향을줍니다.

6

re.X

"멋진"정규식 구문을 허용합니다. 공백을 무시하고 (세트 [] 내부 또는 백 슬래시로 이스케이프 된 경우 제외) 이스케이프되지 않은 #을 주석 표시 자로 처리합니다.

정규식 패턴

제어 문자를 제외하고 (+ ? . * ^ $ ( ) [ ] { } | \), 모든 문자가 일치합니다. 제어 문자 앞에 백 슬래시를 붙여서 이스케이프 할 수 있습니다.

다음 표에는 Python에서 사용할 수있는 정규식 구문이 나열되어 있습니다.

Sr. 아니. 패턴 및 설명
1

^

줄의 시작과 일치합니다.

2

$

줄 끝과 일치합니다.

.

개행을 제외한 모든 단일 문자와 일치합니다. m 옵션을 사용하면 줄 바꿈도 일치시킬 수 있습니다.

4

[...]

괄호 안의 모든 단일 문자와 일치합니다.

5

[^...]

대괄호가 아닌 모든 단일 문자와 일치합니다.

6

re*

0 개 이상의 선행 표현식과 일치합니다.

7

re+

1 개 이상의 선행 표현식과 일치합니다.

8

re?

0 또는 1 개의 선행 표현식과 일치합니다.

9

re{ n}

정확히 n 개의 선행 표현식과 일치합니다.

10

re{ n,}

n 개 이상의 선행 표현식과 일치합니다.

11

re{ n, m}

이전 표현식의 최소 n 개 및 최대 m 개 항목과 일치합니다.

12

a| b

a 또는 b와 일치합니다.

13

(re)

정규식을 그룹화하고 일치하는 텍스트를 기억합니다.

14

(?imx)

정규식 내에서 i, m 또는 x 옵션을 일시적으로 토글합니다. 괄호 안에 있으면 해당 영역 만 영향을받습니다.

15

(?-imx)

정규식 내에서 i, m 또는 x 옵션을 일시적으로 해제합니다. 괄호 안에 있으면 해당 영역 만 영향을받습니다.

16

(?: re)

일치하는 텍스트를 기억하지 않고 정규식을 그룹화합니다.

17

(?imx: re)

괄호 안의 i, m 또는 x 옵션을 일시적으로 토글합니다.

18

(?-imx: re)

괄호 안의 i, m 또는 x 옵션을 일시적으로 끕니다.

19

(?#...)

논평.

20

(?= re)

패턴을 사용하여 위치를 지정합니다. 범위가 없습니다.

21

(?! re)

패턴 부정을 사용하여 위치를 지정합니다. 범위가 없습니다.

22

(?> re)

역 추적없이 독립적 인 패턴과 일치합니다.

23

\w

단어 문자와 일치합니다.

24

\W

단어가 아닌 문자와 일치합니다.

25

\s

공백과 일치합니다. [\ t \ n \ r \ f]와 같습니다.

26

\S

공백이 아닌 것과 일치합니다.

27

\d

숫자와 일치합니다. [0-9]와 같습니다.

28

\D

숫자가 아닌 것과 일치합니다.

29

\A

문자열의 시작과 일치합니다.

30

\Z

문자열의 끝과 일치합니다. 개행이 존재하면 개행 직전에 일치합니다.

31

\z

문자열의 끝과 일치합니다.

32

\G

마지막 경기가 끝난 지점과 일치합니다.

33

\b

괄호 밖에있을 때 단어 경계와 일치합니다. 대괄호 안에있을 때 백 스페이스 (0x08)와 일치합니다.

34

\B

비 단어 경계와 일치합니다.

35

\n, \t, etc.

줄 바꿈, 캐리지 리턴, 탭 등과 일치합니다.

36

\1...\9

n 번째 그룹화 된 하위 표현식과 일치합니다.

37

\10

이미 일치하는 경우 n 번째 그룹화 된 하위 표현식과 일치합니다. 그렇지 않으면 문자 코드의 8 진 표현을 나타냅니다.

정규식 예

리터럴 문자

Sr. 아니. 예 및 설명
1

python

"python"과 일치합니다.

캐릭터 클래스

Sr. 아니. 예 및 설명
1

[Pp]ython

"Python"또는 "python"일치

2

rub[ye]

"ruby"또는 "rube"와 일치

[aeiou]

하나의 소문자 모음과 일치

4

[0-9]

모든 숫자와 일치합니다. [0123456789]와 동일

5

[a-z]

소문자 ASCII 문자와 일치

6

[A-Z]

대문자 ASCII 문자와 일치

7

[a-zA-Z0-9]

위의 항목 중 하나와 일치

8

[^aeiou]

소문자 모음 이외의 항목과 일치

9

[^0-9]

숫자 이외의 항목과 일치

특수 캐릭터 클래스

Sr. 아니. 예 및 설명
1

.

개행을 제외한 모든 문자와 일치

2

\d

숫자 일치 : [0-9]

\D

숫자가 아닌 일치 : [^ 0-9]

4

\s

공백 문자 일치 : [\ t \ r \ n \ f]

5

\S

공백이 아닌 일치 : [^ \ t \ r \ n \ f]

6

\w

단일 단어 문자 일치 : [A-Za-z0-9_]

7

\W

단어가 아닌 문자 일치 : [^ A-Za-z0-9_]

반복 사례

Sr. 아니. 예 및 설명
1

ruby?

"rub"또는 "ruby"일치 : y는 선택 사항입니다.

2

ruby*

"문지르 기"와 0 개 이상의 ys 일치

ruby+

"문지르 기"와 1 개 이상의 ys 일치

4

\d{3}

정확히 3 자리 숫자와 일치

5

\d{3,}

3 개 이상의 숫자 일치

6

\d{3,5}

3, 4 또는 5 자리 일치

탐욕스럽지 않은 반복

이것은 가장 적은 반복 횟수와 일치합니다.

Sr. 아니. 예 및 설명
1

<.*>

욕심 많은 반복 : "<python> perl>"과 일치

2

<.*?>

Nongreedy : "<python> perl>"의 "<python>"과 일치

괄호로 그룹화

Sr. 아니. 예 및 설명
1

\D\d+

그룹 없음 : + 반복 \ d

2

(\D\d)+

그룹화 : + \ D \ d 쌍 반복

([Pp]ython(, )?)+

"Python", "Python, python, python"등과 일치합니다.

역 참조

이전에 일치했던 그룹과 다시 일치합니다.

Sr. 아니. 예 및 설명
1

([Pp])ython&\1ails

python & pails 또는 Python & Pails 일치

2

(['"])[^\1]*\1

작은 따옴표 또는 큰 따옴표로 묶인 문자열. \ 1은 첫 번째 그룹이 일치하는 것과 일치합니다. \ 2는 두 번째 그룹이 일치하는 항목과 일치합니다.

대안

Sr. 아니. 예 및 설명
1

python|perl

"python"또는 "perl"일치

2

rub(y|le))

"루비"또는 "루블"과 일치

Python(!+|\?)

"Python"다음에 하나 이상의! 또는 하나?

앵커

일치 위치를 지정해야합니다.

Sr. 아니. 예 및 설명
1

^Python

문자열 또는 내부 줄의 시작 부분에서 "Python"일치

2

Python$

문자열 또는 줄 끝에서 "Python"일치

\APython

문자열 시작 부분에서 "Python"일치

4

Python\Z

문자열 끝에서 "Python"일치

5

\bPython\b

단어 경계에서 "Python"일치

6

\brub\B

\ B는 단어가 아닌 경계입니다. "rube"및 "ruby"의 "rub"과 일치하지만 단독은 아닙니다

7

Python(?=!)

느낌표가 뒤에 오는 경우 "Python"과 일치합니다.

8

Python(?!!)

느낌표가 뒤에 나오지 않으면 "Python"과 일치합니다.

괄호가있는 특수 구문

Sr. 아니. 예 및 설명
1

R(?#comment)

"R"과 일치합니다. 나머지는 모두 코멘트

2

R(?i)uby

"uby"와 일치하는 동안 대소 문자를 구분하지 않음

R(?i:uby)

같은 상기와

4

rub(?:y|le))

\ 1 역 참조를 생성하지 않고 그룹화