>  기사  >  백엔드 개발  >  Python의 정규식

Python의 정규식

WBOY
WBOY원래의
2023-08-27 10:05:211195검색

Python의 정규식

문서에서 특정 텍스트를 찾기 하거나 텍스트가 특정 형식(예: 이메일 주소)을 준수 하는 것과 기타 유사한 작업을 수행하는 데 핵심이 무엇인지 궁금한 적이 있습니까?

이런 유형의 연산의 핵심은 정규식(regex)입니다. 정규식의 몇 가지 정의를 살펴보겠습니다. Wikipedia에서는 정규식을 다음과 같이 정의합니다.

검색 패턴을 정의하는 문자 시퀀스로, 주로 패턴 일치 또는 문자열과의 문자열 일치, 즉 "찾기 및 바꾸기"와 같은 작업에 사용됩니다. 이 개념은 1950년대 미국 수학자 스티븐 클리네(Stephen Kleene)가 정규 언어에 대한 설명을 공식화하고 유닉스 텍스트 처리 유틸리티인 ed(편집기) 및 grep(필터)과 함께 일반적으로 사용되면서 등장했습니다.

regular-expressions.info의 또 다른 좋은 정의는 다음과 같습니다.

정규식(regex 또는 줄여서 regexp)은 검색 패턴을 설명하는 데 사용되는 특수 텍스트 문자열입니다. 정규식을 스테로이드의 와일드카드로 생각할 수 있습니다. 파일 관리자에서 모든 텍스트 파일을 찾는 데 사용되는 *.txt와 같은 와일드카드 표기법에 익숙할 것입니다. 정규 표현식은 .*.txt$

입니다.

정규식의 개념이 여전히 다소 모호하게 들릴 수도 있다는 것을 알고 있습니다. 이제 이 개념을 더 잘 이해하기 위해 몇 가지 정규식 예를 살펴보겠습니다.

정규 표현식 예

이 섹션에서는 이 개념을 더 잘 이해할 수 있도록 정규식의 몇 가지 예를 보여 드리겠습니다.

다음 정규 표현식이 있다고 가정해 보겠습니다.

으아악

단지 단어만 일치시키라는 뜻입니다 abder.

이 정규 표현식은 어떻습니까?

으아악

이 정규식은 다음과 같이 읽을 수 있습니다. 첫 글자가 a,最后一个字母是 t,这些字母之间是 nr。所以匹配的词是 antart인 텍스트 패턴을 찾으세요.

이제 간단한 퀴즈를 드리겠습니다. ca 开头,并以以下一个或全部字符 tbr로 끝나는 정규식을 작성하는 방법은 무엇입니까? 예, 이 정규 표현식은 다음과 같이 작성할 수 있습니다:

으아악

곡절 기호 ^ 开头的正则表达式,则表示匹配以 ^ 之后提到的字符串开头的字符串。因此,如果您有下面的正则表达式,它会匹配以 This로 시작하는 문자열이 있는 경우.

으아악

따라서 다음 문자열에서:

으아악

정규식을 기준으로 /^This/ 다음 문자열과 일치합니다.

으아악

끝나는 문자열 을 특정 문자열 과 일치시키려면 어떻게 해야 할까요? 이 경우 달러 기호 $를 사용합니다. 예는 다음과 같습니다.

으아악

따라서 위의 문자열(3줄)에서 이 정규식은 다음 패턴과 일치하는 데 사용됩니다.

으아악

그렇다면 이 정규 표현식에 대해 어떻게 생각하시나요?

으아악

언뜻 보면 복잡해 보일 수도 있지만, 차근차근 살펴보겠습니다.

우리는 약강이 무엇인지 배웠습니다. ^ 。这意味着匹配以某个字符串开头的字符串。 [A-Z] 指的是大写字母。因此,如果我们阅读正则表达式的这一部分: ^[A-Z],它告诉我们匹配以大写字母开头的字符串。最后一部分 [a-z]는 대문자로 시작하는 문자열이 발견되면 그 뒤에 알파벳의 소문자가 따른다는 것을 의미합니다.

그렇다면 다음 문자열 중 이 정규식을 사용하여 일치하는 문자열은 무엇입니까? 확실하지 않은 경우 Python(다음 섹션에서 살펴보겠지만)을 사용하여 답을 테스트할 수 있습니다.

으아악

정규 표현식은 매우 광범위한 주제입니다. 이러한 예는 정규 표현식이 무엇인지, 왜 사용하는지에 대한 아이디어를 제공하기 위한 것입니다.

RexEgg는 정규식에 대해 자세히 알아보고 더 많은 예제를 볼 수 있는 훌륭한 참고 자료입니다.

파이썬의 정규 표현식

이제 재미있는 부분을 살펴보겠습니다. 위의 정규 표현식 중 일부를 Python에서 사용하는 방법을 알아보고 싶습니다. Python에서 정규식을 처리하는 데 사용할 모듈은 re 모듈입니다.

첫 번째 예는 abder라는 단어를 찾는 것입니다. Python에서는 다음과 같이 이를 수행합니다.

으아악

위 Python 스크립트를 실행하면 다음과 같은 결과가 출력됩니다. None!

스크립트는 잘 작동하지만 문제는 match() 함수가 작동하는 방식입니다. match() 的工作方式。如果我们返回 re 模块文档,这就是函数 match() 모듈 문서를 반환하면 match() 함수가 수행하는 작업은 다음과 같습니다.

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回 None;请注意,这与零长度匹配不同。

啊哈,从这里我们可以看出,match() 仅当在字符串的开头找到匹配项时才会返回结果。

我们可以使用函数 search(),这是基于文档的:

扫描字符串,查找正则表达式模式产生匹配的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点查找零长度匹配不同。

因此,如果我们编写上面的脚本,但使用 search() 而不是 match(),我们会得到以下输出:

<_sre.sre_match></_sre.sre_match>

即返回了一个匹配对象

如果我们想返回结果(字符串匹配),我们使用 group() 函数。如果我们想查看整个比赛,我们使用 group(0)。因此:

打印 match_pattern.group(0)

将返回输出:Abder

如果我们采用上一节中的第二个正则表达式,即 /a[nr]t/,则可以用 Python 编写如下:

import re
text = 'This is a black ant'
match_pattern = re.search(r'a[nr]t', text)
print match_pattern.group(0)

此脚本的输出是:ant

结论

文章越来越长,Python 中的正则表达式主题即使不是一本书,也肯定需要不止一篇文章。

然而,本文旨在让您快速入门并有信心进入 Python 正则表达式的世界。您可以参考 re 文档来了解有关此模块的更多信息以及如何深入了解该主题。

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

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