산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬 - 정규 표현식

이전 페이지다음 페이지

정규 표현식 패턴에 포함된 특수 구문을 사용하여 다른 문자열이나 문자열 세트를 일치시키거나 찾는 데 도움이 되는 특수 문자 시퀀스입니다. 정규식은 UNIX 세계에서 널리 사용됩니다.

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

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

경기 기능

이 함수는 RE 패턴 일치를 시도합니다. 문자열로 선택적 플래그 사용 .

다음은 이 함수의 구문입니다. -

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

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

시니어 번호 매개변수 및 설명
1

패턴

일치시킬 정규식입니다.

2

문자열

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

3

플래그

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

재매칭 함수는 일치를 반환합니다. 성공에 대한 이의 제기, 없음 실패에. 그룹(숫자)을 사용합니다. 또는 그룹() 일치 기능 일치하는 표현식을 얻을 개체입니다.

시니어 번호 매치 개체 방법 및 설명
1

그룹(숫자=0)

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

2

그룹()

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

예시

라이브 데모
#!/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 pattern의 첫 번째 발생을 검색합니다. 문자열 내 선택적 플래그 사용 .

다음은 이 함수의 구문입니다. -

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

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

시니어 번호 매개변수 및 설명
1

패턴

일치시킬 정규식입니다.

2

문자열

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

3

플래그

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

re.search 함수는 일치를 반환합니다. 성공에 대한 이의 제기, 없음 실패에. 우리는 그룹(숫자) 을(를) 사용합니다. 또는 그룹() 일치 기능 일치하는 표현식을 얻을 개체입니다.

시니어 번호 매치 개체 방법 및 설명
1

그룹(숫자=0)

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

2

그룹()

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

예시

라이브 데모
#!/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 검색 동안 문자열의 시작 부분에서만 일치하는지 확인합니다. 문자열의 어디에서나 일치하는지 확인합니다(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

검색 및 바꾸기

가장 중요한 중 하나 정규 표현식을 사용하는 메소드는 sub입니다. .

구문

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

이 방법은 RE 패턴의 모든 발생을 대체합니다. 문자열 repl과 함께 , max가 아닌 경우 모든 항목 대체 제공. 이 메서드는 수정된 문자열을 반환합니다.

예시

라이브 데모
#!/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(|)를 사용하여 여러 수정자를 제공할 수 있으며 다음 중 하나로 표시될 수 있습니다. -

시니어 번호 수정자 및 설명
1

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

2

리엘

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

3

리엠

$가 행의 끝(문자열의 끝이 아님)과 일치하도록 하고 ^가 임의의 행(문자열의 시작뿐만 아니라)의 시작과 일치하도록 합니다.

4

다시

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

5

리유

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

6

re.X

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

정규 표현식 패턴

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

다음 표는 Python에서 사용할 수 있는 정규식 구문을 나열합니다. −

시니어 번호 패턴 및 설명
1

^

줄의 시작 부분과 일치합니다.

2

$

줄 끝과 일치합니다.

3

.

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

4

[...]

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

5

[^...]

대괄호가 아닌 모든 단일 문자와 일치

6

재*

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

7

재+

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

8

요?

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

9

다시{n}

앞의 표현식과 정확히 n번 일치합니다.

10

다시{n,}

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

11

다시{n,m}

선행 표현식의 최소 n번 및 최대 m번과 일치합니다.

12

아| ㄴ

또는 b와 일치합니다.

13

(재)

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

14

(?imx)

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

15

(?-imx)

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

16

(?:다시)

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

17

(?imx:다시)

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

18

(?-imx:다시)

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

19

(?#...)

댓글.

20

(?=다시)

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

21

(?! 다시)

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

22

(?> 다시)

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

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 등

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

36

\1...\9

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

37

\10

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

정규 표현식 예

리터럴 문자

시니어 번호 예 및 설명
1

파이썬

"파이썬"과 일치합니다.

캐릭터 클래스

시니어 번호 예 및 설명
1

[Pp]파이썬

"파이썬" 또는 "파이썬" 일치

2

문지르다[예]

"ruby" 또는 "ruby" 일치

3

[아에이오]

하나의 소문자 모음과 일치

4

[0-9]

임의의 숫자와 일치합니다. [0123456789]와 동일

5

[a-z]

모든 소문자 ASCII 문자와 일치

6

[A-Z]

모든 대문자 ASCII 문자와 일치

7

[a-zA-Z0-9]

위의 항목 중 하나와 일치

8

[^aeiou]

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

9

[^0-9]

숫자가 아닌 다른 것과 일치

특수 문자 클래스

시니어 번호 예 및 설명
1

.

개행 문자를 제외한 모든 문자 일치

2

\d

숫자 일치:[0-9]

3

\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_]

반복 사례

시니어 번호 예 및 설명
1

루비?

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

2

루비*

"rub"과 0개 이상의 ys 일치

3

루비+

"rub"과 1개 이상의 ys 일치

4

\d{3}

정확히 3자리 일치

5

\d{3,}

3자리 이상 일치

6

\d{3,5}

3, 4 또는 5자리 숫자 일치

욕심 없는 반복

이것은 가장 작은 반복 횟수와 일치합니다 -

시니어 번호 예 및 설명
1

<.*>

욕심 많은 반복:"perl>"

과 일치
2

<.*?>

Nongreedy:"perl>"

의 ""과 일치

괄호로 그룹화

시니어 번호 예 및 설명
1

\D\d+

그룹 없음:+ 반복 \d

2

(\D\d)+

그룹화됨:+ \D\d 쌍

반복
3

([Pp]파이썬(, )?)+

"Python", "Python, python, python" 등을 찾습니다.

역참조

이것은 이전에 일치했던 그룹과 다시 일치합니다 -

시니어 번호 예 및 설명
1

([Pp])ython&\1ails

python&pails 또는 Python&pails 일치

2

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

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

대안

시니어 번호 예 및 설명
1

파이썬|펄

"python" 또는 "perl"과 일치

2

문지르다(y|le))

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

3

파이썬(!+|\?)

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

앵커

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

시니어 번호 예 및 설명
1

^파이썬

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

2

파이썬$

문자열이나 줄의 끝에서 "Python"을 찾습니다.

3

\APython

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

4

파이썬\Z

문자열 끝에 "Python" 일치

5

\b파이썬\b

단어 경계에서 "Python" 일치

6

\brub\B

\B는 비단어 경계입니다:"rub"과 "ruby"에서 "rub"과 일치하지만 단독은 아닙니다.

7

파이썬(?=!)

느낌표가 뒤에 오는 경우 "Python"을 찾습니다.

8

파이썬(?!!)

뒤에 느낌표가 없으면 "Python"과 일치시킵니다.

괄호가 있는 특수 구문

시니어 번호 예 및 설명
1

R(?#댓글)

"R"과 일치합니다. 나머지는 댓글입니다

2

R(?i)uby

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

3

R(?i:uby)

위와 동일

4

문지름(?:y|le))

\1 역참조

를 생성하지 않고 그룹화만

python

  1. 파이썬 데이터 유형
  2. 파이썬 연산자
  3. 파이썬 통과 문
  4. 파이썬 함수 인수
  5. 파이썬 사전
  6. 파이썬 반복자
  7. 파이썬 클로저
  8. 파이썬 정규식
  9. 파이썬 날짜 시간
  10. 자바 - 정규식