문서에서 특정 텍스트를 찾기 하거나 텍스트가 특정 형식(예: 이메일 주소)을 준수 하는 것과 기타 유사한 작업을 수행하는 데 핵심이 무엇인지 궁금한 적이 있습니까?
이런 유형의 연산의 핵심은 정규식(regex)입니다. 정규식의 몇 가지 정의를 살펴보겠습니다. Wikipedia에서는 정규식을 다음과 같이 정의합니다.
검색 패턴을 정의하는 문자 시퀀스로, 주로 패턴 일치 또는 문자열과의 문자열 일치, 즉 "찾기 및 바꾸기"와 같은 작업에 사용됩니다. 이 개념은 1950년대 미국 수학자 스티븐 클리네(Stephen Kleene)가 정규 언어에 대한 설명을 공식화하고 유닉스 텍스트 처리 유틸리티인 ed(편집기) 및 grep(필터)과 함께 일반적으로 사용되면서 등장했습니다.
regular-expressions.info의 또 다른 좋은 정의는 다음과 같습니다.
정규식(regex 또는 줄여서 regexp)은 검색 패턴을 설명하는 데 사용되는 특수 텍스트 문자열입니다. 정규식을 스테로이드의 와일드카드로 생각할 수 있습니다. 파일 관리자에서 모든 텍스트 파일을 찾는 데 사용되는 *.txt와 같은 와일드카드 표기법에 익숙할 것입니다. 정규 표현식은 .*.txt$입니다.
정규식의 개념이 여전히 다소 모호하게 들릴 수도 있다는 것을 알고 있습니다. 이제 이 개념을 더 잘 이해하기 위해 몇 가지 정규식 예를 살펴보겠습니다.
이 섹션에서는 이 개념을 더 잘 이해할 수 있도록 정규식의 몇 가지 예를 보여 드리겠습니다.
다음 정규 표현식이 있다고 가정해 보겠습니다.
으아악단지 단어만 일치시키라는 뜻입니다 abder
.
이 정규 표현식은 어떻습니까?
으아악이 정규식은 다음과 같이 읽을 수 있습니다. 첫 글자가 a
,最后一个字母是 t
,这些字母之间是 n
或 r
。所以匹配的词是 ant
和 art
인 텍스트 패턴을 찾으세요.
이제 간단한 퀴즈를 드리겠습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!