>  기사  >  백엔드 개발  >  Python의 re 모듈 정규식 연산

Python의 re 모듈 정규식 연산

高洛峰
高洛峰원래의
2017-03-02 16:08:141209검색

이 모듈은 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 = prog.match(string)




result = re .match(패턴, 문자열)


은 동일합니다.


첫 번째 방법은 정규 표현식의 재사용을 실현할 수 있습니다.


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


문자열을 검색하여 정규식과 일치하는지 확인하세요. _sre.SRE_Match 개체를 반환하거나, 일치하는 항목이 없으면 None을 반환합니다.


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


문자열의 시작 부분이 정규식과 일치할 수 있는지 여부입니다. _sre.SRE_Match 개체를 반환하거나, 일치하는 항목이 없으면 None을 반환합니다.


re.split(pattern, string, maxsplit=0)


문자열을 정규식으로 분할합니다. 정규식을 괄호로 묶으면 일치하는 문자열도 목록에 포함되어 반환됩니다. 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()

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


RE와 일치하는 모든 하위 문자열을 찾고 다른 문자열 대체를 사용합니다. 선택적 인수 count는 패턴 일치 후의 최대 대체 수입니다. count는 음수가 아닌 정수여야 합니다. 기본값은 모든 일치 항목을 바꾸는 0입니다. 일치하는 항목이 없으면 문자열은 변경되지 않은 채 반환됩니다.


re.subn(pattern, repl, string, count=0, flags=0)


은 re.sub 메소드와 동일한 효과를 갖지만 new 두 개의 문자열 튜플과 대체 실행 횟수입니다.


re.escape(string)


문자열에서 영숫자가 아닌 문자를 이스케이프하세요


re.purge()


캐시에서 정규식 지우기


4. 정규식 개체

re.RegexObject


re.compile()은 RegexObject 객체를 반환합니다.


re.MatchObject


group()은 RE 문자열과 일치하는 객체를 반환합니다. 🎜>


start()는 경기가 시작되는 위치를 반환


end()는 경기가 끝나는 위치를 반환


span()은 경기가 끝나는 위치를 반환 a 튜플에는 일치 위치(시작, 끝)가 포함됩니다.


5. 컴파일 플래그
컴파일 플래그를 사용하면 정규식이 작동하는 방식 중 일부를 수정할 수 있습니다. re 모듈에서 플래그는 두 가지 이름을 사용할 수 있습니다. 하나는 IGNORECASE와 같은 전체 이름이고 다른 하나는 I와 같은 약어, 한 글자 형식입니다. (Perl의 모드 수정에 익숙하다면 한 글자 형태는 동일한 문자를 사용합니다. 예를 들어 re.VERBOSE의 약어는 re.X입니다.) 여러 플래그는 비트 단위 OR로 지정될 수 있습니다. 예를 들어, re.I | re.M은 I 및 M 플래그로 설정됩니다.


I

IGNORECASE

는 대소문자를 일치시킵니다. -sensitive 문자 클래스와 문자열은 문자를 일치시킬 때 대소문자를 무시합니다. 예를 들어, [A-Z]는 소문자와 일치할 수도 있고 스팸은 "Spam", "spam" 또는 "spAM"과 일치할 수도 있습니다. 이 소문자는 현재 위치를 고려하지 않습니다.


L

LOCALE

현재 현지화 설정에 따라 "w, "W, "b 및 "B에 영향을 미칩니다. .


로케일은 다양한 언어를 고려해야 하는 프로그래밍을 지원하는 데 사용되는 C 언어 라이브러리의 기능입니다. 예를 들어 프랑스어 텍스트로 작업하는 경우 텍스트를 "w+와 일치시키려고 하지만 "w는 문자 클래스 [A-Za-z]에만 일치하며 "é" 또는 "?"와 일치하지 않습니다. 시스템이 적절하게 구성되고 로캘이 프랑스어로 설정된 경우 내부 C 기능은 "é"도 문자로 간주되어야 함을 프로그램에 알립니다. 정규식을 컴파일할 때 LOCALE 플래그를 사용하면 "w"를 처리하기 위해 이러한 C 함수를 사용하는 컴파일된 개체가 생성되지만, 여전히 "w+를 사용하여 프랑스어 텍스트와 일치시킬 수 있습니다.


M

MULTILINE

(^ 및 $는 현재 해석되지 않으며 섹션 4.1에서 소개됩니다.)


문자열의 시작 부분만 일치시키려면 "^"를 사용하고, $는 문자열의 끝 부분과 개행 문자(있는 경우) 바로 앞의 문자열 끝 부분만 일치시킵니다. 이 플래그가 지정되면 "^"는 문자열의 시작 부분과 문자열의 각 줄의 시작 부분과 일치합니다. 마찬가지로 $ 메타문자는 문자열의 끝과 문자열의 각 줄의 끝(각 개행 바로 앞)과 일치합니다.


S

DOTALL

"." 특수 문자는 이 플래그가 없는 개행 문자를 포함하여 모든 문자와 정확히 일치합니다. " 개행 문자를 제외한 모든 문자와 일치합니다.


X

상세

이 플래그를 사용하면 보다 유연한 형식을 제공하여 정규식 작성을 더 쉽게 이해할 수 있습니다. 이 플래그가 지정되면 RE 문자열 내의 공백은 공백이 문자 클래스 내에 있거나 백슬래시 뒤에 있지 않는 한 무시됩니다. 이를 통해 RE를 더 명확하게 구성하고 들여쓰기할 수 있습니다. 또한 엔진에서 무시되는 주석을 RE에 쓸 수 있습니다. 주석은 "#" 기호로 표시되지만 이 기호는 문자열이나 백슬래시 뒤에 올 수 없습니다.

마지막으로: 문자열 방법을 사용할 수 있다면 정규식을 선택하지 마세요. 문자열 방법이 더 간단하고 빠르기 때문입니다.

Python의 re 모듈 정규식 연산과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


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