>  기사  >  백엔드 개발  >  파이썬 정규식을 배우는 방법은 무엇입니까?

파이썬 정규식을 배우는 방법은 무엇입니까?

零下一度
零下一度원래의
2017-07-03 15:21:521248검색

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

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

re.match(pattern, string, flags=0) # 匹配成功返回一个匹配的对象,否则返回none
1 import re2 print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配 (0, 3)3 print(re.match('com', 'www.runoob.com'))        # 不在起始位置匹配 None
 1 import re 2 line = "cats are smarter than dogs" 3 matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I) 4 # matchObj = re.match(r'(.*) are (.*) .*', line, re.M|re.I)  # 结果也一样 5  6 if matchObj: 7     print("matchObj.group()", matchObj.group())     # cats are smarter than dogs 8     print("matchObj.group(1)", matchObj.group(1))   # cats 9     print("matchObj.group(2)", matchObj.group(2))   # smarter10 else:11     print("No match!!")
 1 import re 2 line = "cats are smarter than dogs" 3 matchObj = re.match(r'(.*) are (.*?) (.*) .*', line, re.M|re.I) 4 # matchObj = re.match(r'(.*) are (.*) (.*) .*', line, re.M|re.I)  #这个结果也一样  5  6 if matchObj: 7     print("matchObj.group()", matchObj.group())     # cats are smarter than dogs 8     print("matchObj.group(1)", matchObj.group(1))   # cats 9     print("matchObj.group(2)", matchObj.group(2))   # smarter10     print("matchObj.group(3)", matchObj.group(3))   # than11 else:12     print("No match!!")

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

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

re.search는 전체 문자열을 검색하고 첫 번째로 성공한 일치 항목을 반환합니다.

print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配  (0, 3)print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配  (11, 14)
1 import re2 line = "Cats are smarter than dogs";3 searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)4 if searchObj:5     print("searchObj.group() : ", searchObj.group())     # Cats are smarter than dogs   6     print("searchObj.group(1) : ", searchObj.group(1))   # Cats7     print("searchObj.group(2) : ", searchObj.group(2))   # smarter8 else:9     print("Nothing found!!")
 1 line = "Cats are smarter than dogs" 2 matchObj = re.match(r'dogs', line, re.M | re.I) 3 if matchObj: 4     print("match --> matchObj.group() : ", matchObj.group()) 5 else: 6     print("No match!!") 7  8 matchObj = re.search(r'dogs', line, re.M | re.I) 9 if matchObj:10     print("search --> matchObj.group() : ", matchObj.group())11 else:12     print("No match!!")13 '''14 No match!!15 search --> matchObj.group() :  dogs16 '''

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

1 re.search(pattern, string, flags=0)2 re.sub(pattern, repl, string, count=0, flags=0)

re 모듈은 문자열에서 일치하는 항목을 대체하기 위해 re.sub를 제공합니다.

매개변수:

  • pattern: 정규식의 패턴 문자열입니다.

  • repl: 대체할 문자열도 함수일 수 있습니다.

  • string : 검색하고 바꿀 원래 문자열입니다.

  • count: 패턴 일치 후 최대 교체 횟수입니다. 기본값은 0이며, 이는 모든 일치 항목을 교체함을 의미합니다. ㅋㅋㅋ

  • 레.
문자를 구문 분석합니다. 이 플래그는 w, W, b, B에 영향을 줍니다.


re.X

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

re.I | re.M... 비트별 OR(|)를 통해 여러 플래그를 지정할 수 있습니다.

정규 표현식 패턴

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

^ 은 문자열의 시작과 일치합니다.
$ 은 문자열의 끝과 일치합니다.
. 은 개행 문자를 제외한 모든 문자와 일치합니다. re.DOTALL 플래그가 지정되면 개행 문자를 포함한 모든 문자와 일치할 수 있습니다.
[...] 은 별도로 나열된 문자 그룹을 나타내는 데 사용됩니다. [amk]는 'a', 'm' 또는 'k'와 일치합니다.
[^...] 존재하지 않음 []의 문자: [^abc]는 a, b, c를 제외한 문자와 일치합니다.
re* 은 0개 이상의 표현식과 일치합니다.
re+ 은 1개 이상의 표현식과 일치합니다.
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 선택적 플래그를 사용하지 마세요.
(?#...) Comments.
(?= re) 앞으로 양수 구분 기호. ... 로 표시되는 포함된 정규식이 현재 위치와 성공적으로 일치하면 성공하고, 그렇지 않으면 실패합니다. 그러나 포함된 표현식을 시도한 후에는 일치 엔진이 전혀 개선되지 않으며 패턴의 나머지 부분은 여전히 ​​구분 기호의 오른쪽을 시도해야 합니다.
(?! re) 앞으로 음수 구분 기호를 사용하세요. 양수 구분 기호와 달리 포함된 표현식이 문자열의 현재 위치에서 일치할 수 없으면 성공합니다.
(?> re) 독립적인 패턴이 일치하므로 역추적할 필요가 없습니다.
w 영숫자 및 밑줄과 일치
W 영숫자가 아닌 문자 및 밑줄과 일치
s [tnrf]에 해당하는 모든 공백 문자와 일치합니다.
S 일치 비어 있지 않은 문자
d 는 [0-9]에 해당하는 모든 숫자와 일치합니다.
D 숫자가 아닌 모든 문자와 일치
A 문자열의 시작과 일치
Z 문자열의 끝과 일치합니다. 줄 바꿈이 있는 경우 줄 바꿈 이전의 문자열 끝만 일치합니다. c
z 는 문자열
G 의 끝과 일치하며 마지막 일치가 완료된 위치와 일치합니다.
b 은 단어와 공백 사이의 위치를 ​​나타내는 단어 경계와 일치합니다. 예를 들어, 'erb'는 "never"의 'er'와 일치하지만 "동사"의 "er"는 일치하지 않습니다.
B 은 단어가 아닌 경계와 일치합니다. 'erB'는 "동사"의 'er'와 일치하지만 "never"에서는 일치하지 않습니다.
n, t 등 은 개행 문자와 일치합니다. 탭 문자와 일치합니다. n번째 그룹의 콘텐츠가 일치하도록
1...9 기다려 보세요.
10 일치하면 n번째 그룹의 내용과 일치합니다. 그렇지 않으면 8진수 문자 코드의 표현을 참조합니다.

1. 문자 일치

는 "python"과 일치합니다.

2. 문자 클래스

[Pp]ython 은 "Python" 또는 "python"과 일치합니다
r ub [ye] 는 "ruby" 또는 "rube"와 일치합니다
[aeiou] 대괄호 안의 문자와 일치
[0-9] 모든 숫자와 일치합니다. [0123456789]
[a-z] 모든 소문자와 일치
[A-Z] 모든 대문자와 일치
[a-zA-Z0-9] 모든 문자와 일치 & ; 숫자
[^aeiou] aeiou 문자를 제외한 모든 문자
[^0-9] 숫자를 제외한 문자와 일치

3. 특수 문자Class

. "n"을 제외한 모든 단일 문자와 일치합니다. 'n'을 포함한 모든 문자를 일치시키려면 '[.n]'과 같은 패턴을 사용하십시오.
d 은 숫자와 일치합니다. [0-9]와 동일합니다.
D 은 숫자가 아닌 문자와 일치합니다. [^0-9]와 동일합니다.
s 은 공백, 탭, 양식 피드 등을 포함한 모든 공백 문자와 일치합니다. [fnrtv]와 동일합니다.
S 은 공백이 아닌 모든 문자와 일치합니다. [^ fnrtv]와 동일합니다.
w 은 밑줄을 포함한 모든 단어 문자와 일치합니다. '[A-Za-z0-9_]'와 동일합니다.
W 은 단어가 아닌 문자와 일치합니다. '[^A-Za-z0-9_]'와 동일합니다.

r은 문자열이 이스케이프되지 않은 원시 문자열임을 나타냅니다. 이를 통해 컴파일러는 백슬래시, 즉 이스케이프 문자를 무시할 수 있습니다.

(.*)첫 번째 일치 그룹인 *는 개행 문자를 제외한 모든 문자와 일치함을 의미합니다.

(.*?) 두 번째 일치 그룹 *? 뒤에 여러 물음표가 있으면 비탐욕 모드, 즉 조건을 충족하는 최소 문자만 일치함을 나타냅니다.

마지막 .*는 일치하지 않습니다. 괄호로 둘러싸서 그룹화, 매칭이 되지 않습니다. 효과는 처음과 동일하지만 매칭 결과에는 포함되지 않습니다.

위 내용은 파이썬 정규식을 배우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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