>  기사  >  백엔드 개발  >  7가지 Python 정규식 사용 예

7가지 Python 정규식 사용 예

怪我咯
怪我咯원래의
2017-04-07 10:46:111640검색

개념적으로 정규식은 Python에만 국한되지 않습니다. 그러나 Python에서 정규식을 실제로 사용하는 데는 여전히 약간의 차이가 있습니다.

이 기사는 Python 정규식에 관한 기사 시리즈의 일부입니다. 이 시리즈의 첫 번째 기사에서는 Python에서 정규식을 사용하는 방법에 중점을 두고 Python의 몇 가지 고유한 기능을 강조합니다.

파이썬에서 문자열을 검색하고 찾는 몇 가지 방법을 소개하겠습니다. 그런 다음 그룹화를 사용하여 찾은 일치 개체의 하위 항목을 처리하는 방법에 대해 논의하겠습니다.

우리가 사용하고 싶은 Python 정규식 모듈은 일반적으로 're'라고 합니다.

1. Python의 기본 유형 문자열

Python 컴파일러는 ''(백슬래시)를 사용하여 문자열을 나타냅니다. .

백슬래시 뒤에 컴파일러가 인식하는 특수 문자 문자열이 오는 경우 전체 이스케이프 시퀀스는 해당 특수 문자로 대체됩니다. 예를 들어 'n'은 다음과 같은 줄바꿈 문자로 대체됩니다. 컴파일러) .

그러나 이는 Python에서 정규식을 사용하는 데 문제가 됩니다. 왜냐하면 백슬래시는 정규식의 특수 문자(예: * 및 +)를 이스케이프하기 위해 're' 모듈에서도 사용되기 때문입니다.

두 가지를 혼합하면 때때로 이스케이프 문자 자체를 이스케이프 처리해야 하지만(특수 문자가 Python과 정규식 컴파일러 모두에서 인식되는 경우) 다른 경우에는 이것이 필요하지 않습니다( 특수 문자는 Python 컴파일러에서만 인식됩니다.)

백슬래시가 얼마나 필요한지 파악하는 대신 원시 문자열을 사용할 수 있습니다.

일반 문자열의 큰따옴표 앞에 'r' 문자를 추가하면 기본 유형 문자열을 만들 수 있습니다. 문자열이 기본 유형인 경우 Python 컴파일러는 대체를 시도하지 않습니다. 본질적으로 컴파일러에게 문자열을 전혀 방해하지 말라고 지시하는 것입니다.

Python에서 정규식을 사용하여 찾기

're' 모듈은 입력 문자열에 대한 여러 메서드를 제공합니다. 정확한 문의를 하세요. 우리가 논의할 방법은 다음과 같습니다:



각 방법은 정규 표현식과 일치하는 문자열을 허용합니다. 각 방법을 자세히 살펴보고 작동 방식과 차이점을 이해해 보겠습니다.

2. re.match를 사용하여 검색 – 매칭 시작

먼저 match() 메소드를 살펴보겠습니다. match() 메서드가 작동하는 방식은 검색 중인 문자열의 시작 부분이 패턴과 일치하는 경우에만 일치 항목을 찾는 것입니다.

예를 들어 'dog cat dog' 문자열에 대해 math() 메서드를 호출하면 'dog' 검색 패턴이 다음과 일치합니다.



group() 메소드에 대해서는 나중에 더 자세히 설명하겠습니다. 지금은 인수로 0을 사용하여 호출했다는 점과 group() 메서드가 찾은 일치 패턴을 반환한다는 점만 알면 됩니다.

지금은 반환된 SRE_Match 개체도 건너뛰었습니다. 이에 대해서는 곧 논의하겠습니다.

그러나 동일한 문자열에 대해 math() 메서드를 호출하여 'cat' 패턴을 찾으면 일치하는 항목이 발견되지 않습니다.

3. re.search를 사용하여 찾기 – 임의의 위치와 일치

search() 메소드는 match()와 유사합니다. , 그러나 검색 () 메소드는 문자열의 시작 부분에서만 일치 항목을 찾는 것으로 제한하지 않으므로 예제 문자열에서 'cat'을 찾으면 일치 항목을 찾습니다:

그러나 일치하는 항목을 찾으면 search() 메서드가 중지되므로 예제 문자열에서 searc() 메서드를 사용하여 'dog'을 검색하면 해당 항목이 처음 나타나는 항목만 찾습니다.


4. re.findall 사용 – 일치하는 모든 객체

지금까지 Python에서 가장 많이 사용하는 find 메서드는 findall() 메서드입니다. findall() 메서드를 호출하면 일치 개체를 가져오는 대신 일치하는 모든 패턴의 목록을 간단히 가져올 수 있습니다(일치 개체에 대해서는 다음에 자세히 설명하겠습니다). 나에게는 더 간단합니다. 우리가 얻은 예제 문자열에서 findall() 메소드를 호출합니다:

5. match.start 및 match.end 메소드를 사용합니다

그렇다면 이전에 search() 및 match() 메소드에 의해 반환된 'match' 객체는 무엇입니까?

단순히 문자열의 일치하는 부분을 반환하는 것과는 달리, search() 및 match()에서 반환된 "일치하는 개체"는 실제로 일치하는 하위 문자열을 위한 래퍼 클래스입니다.

앞서 group() 메서드를 호출하여 일치하는 하위 문자열을 얻을 수 있다는 것을 보셨습니다(다음 섹션에서 살펴보겠지만 일치 개체는 그룹화 문제를 처리할 때 실제로 매우 유용합니다). object is still 부분 문자열 일치에 대한 추가 정보가 포함되어 있습니다.

예를 들어 일치 개체는 일치하는 콘텐츠가 원래 문자열에서 시작하고 끝나는 위치를 알려줄 수 있습니다.

이 정보를 아는 것은 때때로 매우 유용합니다.

6. mathch.group을 사용하여 숫자별로 그룹화합니다.

앞서 언급했듯이 일치 개체는 그룹화를 처리하는 데 매우 편리합니다.

그룹화는 전체 정규식의 특정 하위 문자열을 찾는 기능입니다. 전체 정규식의 일부로 그룹을 정의한 다음 이 부분의 일치하는 콘텐츠를 별도로 찾을 수 있습니다.

작동 방식을 살펴보겠습니다.

방금 만든 문자열은 누군가의 주소록 A 조각에서 가져온 문자열과 같습니다. 정규식을 괄호(문자 '(' 및 ')')로 묶어


이 줄을 정규식과 일치시킬 수 있습니다. 콘텐츠를 그룹화할 수 있습니다. 특정 섹션으로 분류한 다음 이러한 하위 그룹을 개별적으로 처리합니다.

이러한 그룹은 그룹 개체의 group() 메서드를 사용하여 얻을 수 있습니다. 정규식에서 왼쪽에서 오른쪽으로 나타나는 숫자 순서로 찾을 수 있습니다(1부터 시작).

그룹의 서수가 다음에서 시작하는 이유 1은 0번째 그룹이 일치하는 모든 객체를 저장하도록 예약되어 있기 때문입니다(이전에 match() 메서드와 search() 메서드를 연구할 때 본 적이 있습니다).

7. match.group을 사용하여 별칭별로 그룹화

때때로, 특히 정규식에 그룹이 많은 경우 그룹별로 위치 지정 외모가 비현실적이게 됩니다. Python에서는 다음 문을 통해 그룹 이름을 지정할 수도 있습니다.

여전히 group() 메서드를 사용하여 그룹의 내용을 가져올 수 있지만 이번에는 이전에 사용한 그룹 수 대신 그룹 이름을 지정한 것을 사용해야 합니다.

이렇게 하면 코드의 명확성과 가독성이 크게 향상됩니다. 정규식이 더욱 복잡해짐에 따라 그룹이 캡처하는 내용을 이해하는 것이 점점 더 어려워진다고 상상할 수 있습니다. 그룹 이름을 지정하면 귀하와 독자에게 귀하의 의도가 명확하게 전달됩니다.

findall() 메소드는 그룹화된 객체를 반환하지 않지만 그룹화를 사용할 수도 있습니다. 마찬가지로 findall() 메서드는 튜플 컬렉션을 반환합니다. 여기서 각 튜플의 N번째 요소는 정규식의 N번째 그룹에 해당합니다.

단, findall() 메서드에는 그룹 이름 지정이 적용되지 않습니다.

이 기사에서는 Python에서 정규식을 사용하는 몇 가지 기본 사항을 소개했습니다. 우리는 기본 문자열 유형에 대해 배웠습니다(그리고 이것이 정규식 사용으로 인한 골치 아픈 문제를 해결하는 데 어떻게 도움이 될 수 있는지). 또한 match(), search() 및 findall() 메서드를 사용하여 기본 쿼리를 수행하는 방법과 그룹화를 사용하여 일치하는 개체의 하위 구성 요소를 처리하는 방법도 배웠습니다.

언제나 그렇듯이, 이 주제에 대해 더 자세히 알고 싶다면 re 모듈에 대한 공식 Python 문서가 훌륭한 리소스입니다.

향후 기사에서는 Python에서 정규식을 적용하는 방법에 대해 더 자세히 논의하겠습니다. 일치 개체에 대해 보다 포괄적으로 살펴보고, 이를 사용하여 문자열 내에서 대체를 수행하는 방법을 배우고, 심지어 이를 사용하여 텍스트 파일에서 Python 데이터 구조를 구문 분석합니다.

위 내용은 7가지 Python 정규식 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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