이 모듈은 Perl과 유사한 정규식 일치 작업을 제공합니다. 유니코드 문자열에도 동일하게 적용됩니다.
정규 표현식은 백슬래시 " "를 사용하여 특수 형식을 나타내거나 Python의 구문과 충돌합니다. 따라서 Python은 " \\ "를 사용하여 정규 표현식 " "을 나타냅니다. 정규식에서 " "와 일치하면 이를 이스케이프하여 " \ "로 변경해야 하고, Python 구문에서는 문자열의 각 항목을 이스케이프해야 하므로 " \\ "가 됩니다.
위의 작성 방법이 번거롭다고 생각하시나요? 정규식을 더 쉽게 읽을 수 있도록 Python에서는 원시 문자열을 특별히 설계했습니다. 파일 경로를 작성할 때 원시 문자열을 사용하지 마세요. , 여기에 함정이 있습니다. 원시 문자열은 r"n"과 같이 문자열의 접두어로 'r'을 사용합니다. 이는 개행 문자 대신 "" 및 "n" 두 문자를 나타냅니다. 이 형식은 Python에서 정규식을 작성할 때 권장됩니다.
대부분의 정규식 작업은 모듈 수준 함수 또는 RegexObject 메서드와 동일한 목적을 달성할 수 있습니다. 그리고 처음부터 정규식 개체를 컴파일할 필요는 없지만 일부 실용적인 미세 조정 매개변수를 사용할 수는 없습니다.
1. 정규식 구문
여기에서는 설명하지 않습니다.
2. 행진과 검색의 차이점
Python은 일치와 검색이라는 두 가지 기본 연산을 제공합니다. 일치는 문자열의 시작점에서 시작하는 반면 검색(perl 기본값)은 문자열에서 일치를 시작합니다.
참고: 정규 표현식이 '^'로 시작하면 일치와 검색이 동일합니다. 일치하는 문자열이 처음부터 일치하거나 pos 매개변수 위치부터 일치할 수 있는 경우에만 일치가 성공합니다. 다음과 같습니다:
>>> import re
>>> re.match("c", "abcdef")
>>> re .search("c","abcdef")
<_sre.SRE_Match 개체(0x00A9A988)>
>>> re.match("c", "cabcdef")
< _sre .SRE_Match 개체 0x00A9AB80>
>>> re.search("c","cabcdef")
<_sre.SRE_Match 개체 0x00AF1720>
>>> = re.compile("c")
>>> patterm.match("abcdef")
>>> patterm.match("abcdef",1)
> > ;> patterm.match("abcdef",2)
<_sre.SRE_Match 객체(0x00A9AB80)>
3. >
re.compile(pattern, flags=0)
정규식을 컴파일하고 RegexObject 객체를 반환한 다음 match() 및 search( ) RegexObject 개체 메서드를 통해.
prog = re.compile(패턴)
및
result = re .match(패턴, 문자열)
은 동일합니다.
첫 번째 방법은 정규 표현식의 재사용을 실현할 수 있습니다.
문자열을 검색하여 정규식과 일치하는지 확인하세요. _sre.SRE_Match 개체를 반환하거나, 일치하는 항목이 없으면 None을 반환합니다.
문자열의 시작 부분이 정규식과 일치할 수 있는지 여부입니다. _sre.SRE_Match 개체를 반환하거나, 일치하는 항목이 없으면 None을 반환합니다.
문자열을 정규식으로 분할합니다. 정규식을 괄호로 묶으면 일치하는 문자열도 목록에 포함되어 반환됩니다. maxsplit은 분리 횟수, maxsplit=1은 한 번 분리, 기본값은 0이고 횟수에는 제한이 없습니다.
>>> re.split('W+', '단어, 단어, 단어.')
>>> re.split('(W+)', '단어, 단어, 단어.')
['단어', ', ', '단어', ', ', ' 단어', '.', '']
>>> re.split('W+', '단어, 단어, 단어.', 1)
['단어', '단어, 단어 .']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
참고: 제가 사용하는 Python은 2.6 소스 코드를 확인한 결과, 버전 2.7에서 추가된 flags 매개변수가 Split()에 없다는 것을 발견했습니다. 저는 이 문제를 여러 번 발견했습니다. 공식 문서는 소스 코드와 일치하지 않습니다. 비정상적인 점을 발견하면 소스 코드로 이동하여 이유를 찾아야 합니다.
문자열의 시작이나 끝 부분에 일치하는 항목이 있으면 반환된 목록은 빈 문자열로 시작하거나 끝납니다.
>>> re.split('(W+)', '...단어, 단어...')
['', '...', '단어', ', ', 'words', '...', '']
문자열이 일치하지 않으면 전체 문자열의 목록이 반환됩니다.
>>> re.split("a","bbb")
['bbb']
re.findall (pattern, string, flags=0)
RE와 일치하는 모든 하위 문자열을 찾아 목록으로 반환합니다. 일치 항목은 왼쪽에서 오른쪽 순서로 반환됩니다. 일치하는 항목이 없으면 빈 목록이 반환됩니다.
>>> re.findall("a","bcdef")
[]
>>> (r"d+","12a32bc43jf3")
['12', '32', '43', '3']
re.finditer(패턴, 문자열, 플래그=0 )
RE와 일치하는 모든 하위 문자열을 찾아 반복자로 반환합니다. 일치 항목은 왼쪽에서 오른쪽 순서로 반환됩니다. 일치하는 항목이 없으면 빈 목록이 반환됩니다.
>>> it = re.finditer(r"d+","12a32bc43jf3")
>>> group()
4. 정규식 개체
start()는 경기가 시작되는 위치를 반환
end()는 경기가 끝나는 위치를 반환
span()은 경기가 끝나는 위치를 반환 a 튜플에는 일치 위치(시작, 끝)가 포함됩니다.
5. 컴파일 플래그
컴파일 플래그를 사용하면 정규식이 작동하는 방식 중 일부를 수정할 수 있습니다. re 모듈에서 플래그는 두 가지 이름을 사용할 수 있습니다. 하나는 IGNORECASE와 같은 전체 이름이고 다른 하나는 I와 같은 약어, 한 글자 형식입니다. (Perl의 모드 수정에 익숙하다면 한 글자 형태는 동일한 문자를 사용합니다. 예를 들어 re.VERBOSE의 약어는 re.X입니다.) 여러 플래그는 비트 단위 OR로 지정될 수 있습니다. 예를 들어, re.I | re.M은 I 및 M 플래그로 설정됩니다.
IGNORECASE
는 대소문자를 일치시킵니다. -sensitive 문자 클래스와 문자열은 문자를 일치시킬 때 대소문자를 무시합니다. 예를 들어, [A-Z]는 소문자와 일치할 수도 있고 스팸은 "Spam", "spam" 또는 "spAM"과 일치할 수도 있습니다. 이 소문자는 현재 위치를 고려하지 않습니다.
LOCALE
현재 현지화 설정에 따라 "w, "W, "b 및 "B에 영향을 미칩니다. .
로케일은 다양한 언어를 고려해야 하는 프로그래밍을 지원하는 데 사용되는 C 언어 라이브러리의 기능입니다. 예를 들어 프랑스어 텍스트로 작업하는 경우 텍스트를 "w+와 일치시키려고 하지만 "w는 문자 클래스 [A-Za-z]에만 일치하며 "é" 또는 "?"와 일치하지 않습니다. 시스템이 적절하게 구성되고 로캘이 프랑스어로 설정된 경우 내부 C 기능은 "é"도 문자로 간주되어야 함을 프로그램에 알립니다. 정규식을 컴파일할 때 LOCALE 플래그를 사용하면 "w"를 처리하기 위해 이러한 C 함수를 사용하는 컴파일된 개체가 생성되지만, 여전히 "w+를 사용하여 프랑스어 텍스트와 일치시킬 수 있습니다.
MULTILINE
(^ 및 $는 현재 해석되지 않으며 섹션 4.1에서 소개됩니다.)
문자열의 시작 부분만 일치시키려면 "^"를 사용하고, $는 문자열의 끝 부분과 개행 문자(있는 경우) 바로 앞의 문자열 끝 부분만 일치시킵니다. 이 플래그가 지정되면 "^"는 문자열의 시작 부분과 문자열의 각 줄의 시작 부분과 일치합니다. 마찬가지로 $ 메타문자는 문자열의 끝과 문자열의 각 줄의 끝(각 개행 바로 앞)과 일치합니다.
DOTALL
"." 특수 문자는 이 플래그가 없는 개행 문자를 포함하여 모든 문자와 정확히 일치합니다. " 개행 문자를 제외한 모든 문자와 일치합니다.
상세 이 플래그를 사용하면 보다 유연한 형식을 제공하여 정규식 작성을 더 쉽게 이해할 수 있습니다. 이 플래그가 지정되면 RE 문자열 내의 공백은 공백이 문자 클래스 내에 있거나 백슬래시 뒤에 있지 않는 한 무시됩니다. 이를 통해 RE를 더 명확하게 구성하고 들여쓰기할 수 있습니다. 또한 엔진에서 무시되는 주석을 RE에 쓸 수 있습니다. 주석은 "#" 기호로 표시되지만 이 기호는 문자열이나 백슬래시 뒤에 올 수 없습니다. 마지막으로: 문자열 방법을 사용할 수 있다면 정규식을 선택하지 마세요. 문자열 방법이 더 간단하고 빠르기 때문입니다. Python의 re 모듈 정규식 연산과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!