.NET에서 Python 3용 Re 모듈에 대한 문서입니다. 정규 표현식을 위한 Re 모듈

정규식은 거의 모든 프로그래밍 언어에서 매우 인기 있는 구성 요소입니다. 필요한 정보에 빠르게 액세스할 수 있도록 도와줍니다. 특히 텍스트 처리가 필요한 경우에 사용합니다. Python은 기본적으로 특수 모듈과 함께 제공됩니다. re, 정규식 작업을 담당합니다.

오늘 우리는 그것이 일반적으로 무엇인지, 어떻게 작업하고 모듈이 어떻게 작동하는지에 대해 자세히 이야기 할 것입니다. re 도움이 될 것입니다.

정규 표현식: 소개

정규 표현식의 용도는 무엇입니까? 거의 모든. 예를 들면 다음과 같습니다.

  1. 텍스트 유효성 검사가 필요한 웹 응용 프로그램. 일반적인 예는 온라인 메일 클라이언트입니다.
  2. 텍스트, 데이터베이스 등과 관련된 기타 모든 프로젝트.

구문 분석을 시작하기 전에 라이브러리 기능의 기본 원리를 더 자세히 이해해야 합니다. re 그리고 일반적으로 그것에 대해 일반적으로 좋은 점. 우리는 또한 실제 사례를 통해 사용 메커니즘을 설명할 것입니다. 텍스트로 다양한 작업을 수행하는 데 적합한 템플릿을 만들 수 있습니다.

Re 라이브러리의 템플릿은 무엇입니까?

이를 통해 다양한 유형의 정보를 검색하고 그에 해당하는 정보를 얻어 다른 기능을 보다 적응적으로 사용할 수 있습니다. 그리고 물론, 이 데이터를 처리하기 위해.

예를 들어 다음 템플릿을 사용합니다. s+. 모든 공백 문자를 의미합니다. 더하기 기호를 추가하면 패턴에 둘 이상의 공백이 포함된다는 의미입니다. 다음으로 호출되는 탭 문자와도 일치할 수 있습니다. t+.

사용하기 전에 라이브러리를 가져와야 합니다. Re. 그런 다음 특수 명령을 사용하여 템플릿을 컴파일합니다. 이것은 두 단계로 수행됩니다.

>>> 다시 가져오기

>>> 정규식 = re.compile('s+')

구체적으로 이 코드는 사용할 수 있는 템플릿을 컴파일하는 작업을 수행합니다. 예를 들어 공백(하나 이상)을 검색합니다.

정규식을 사용하여 다른 문자열에서 별도의 정보 얻기

다음 정보를 포함하는 변수가 있다고 가정합니다.

>>> 텍스트 = """100 INF 정보학

213 MAT 수학  

156 영어»»»

여기에는 XNUMX개의 교육 과정이 포함되어 있습니다. 각각은 번호, 코드 및 이름의 세 부분으로 구성됩니다. 우리는 이 단어들 사이의 간격이 다르다는 것을 알 수 있습니다. 이 줄을 별도의 숫자와 단어로 나누려면 어떻게 해야 합니까? 이 목표를 달성하기 위한 두 가지 방법이 있습니다.

  1. 함수를 호출 재분할.
  2. 기능을 적용 분열 for 정규식.

다음은 변수에 대한 각 메서드의 구문을 사용하는 예입니다.

>>> re.split('+', 텍스트)  

# 또는

>>> regex.split(텍스트)

출력: ['100', 'INF', '컴퓨터 과학', '213', 'MAT', '수학', '156', 'ENG', '영어']

일반적으로 두 가지 방법을 모두 사용할 수 있습니다. 그러나 함수를 여러 번 사용하는 대신 정규식을 사용하는 것이 실제로 훨씬 쉽습니다. 재분할.

세 가지 기능으로 일치 항목 찾기

문자열에서 숫자만 추출해야 한다고 가정해 보겠습니다. 이를 위해 무엇을 해야 합니까?

re.findall()

다음은 함수의 사용 사례입니다. 찾기(), 정규식과 함께 텍스트 변수에서 하나 이상의 숫자를 추출할 수 있습니다.

>>> 인쇄(텍스트)  

100 INF 정보학

213 MAT 수학  

156 영어

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(텍스트)  

['100', '213', '156']

d 기호와 함께 변수나 텍스트에 있는 모든 숫자 값을 절대적으로 나타내는 템플릿을 사용했습니다. 그리고 거기에 하나의 +를 추가했기 때문에 이것은 적어도 하나의 숫자가 있어야 함을 의미합니다. 

* 기호를 사용하여 일치 항목을 찾는 데 숫자가 필요하지 않음을 지정할 수도 있습니다.

그러나 우리의 경우 +를 사용했기 때문에 추출했습니다. 찾기() 텍스트에서 코스의 하나 이상의 디지털 지정. 따라서 우리의 경우 정규식은 함수에 대한 설정 역할을 합니다.

re.search() 대 다시 일치()

함수 이름에서 짐작할 수 있듯이 먼저 텍스트에서 일치하는 항목을 검색합니다. 질문: 차이점은 무엇입니까? 발견? 요점은 패턴과 일치하는 특정 개체를 반환하는 것이지 이전 함수와 같이 찾은 결과의 전체 시퀀스를 목록 형태로 반환하지 않는다는 것입니다.

차례로 re.match 함수도 동일한 작업을 수행합니다. 구문만 다릅니다. 템플릿은 시작 부분에 배치해야 합니다. 

이를 보여주는 예를 들어보겠습니다.

>>> # 텍스트로 변수 생성

>>> text2 = «»»INF 정보학

213 MAT 수학 156″»»  

>>> # 정규식을 컴파일하고 패턴을 찾습니다.

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(텍스트2)  

>>> print('첫 번째 인덱스: ', s.start())  

>>> print('마지막 인덱스: ', s.end())  

>>> 인쇄(텍스트2[s.start():s.end()]) 

첫 번째 인덱스: 17 

마지막 인덱스: 20

213

다른 방법으로 비슷한 결과를 얻고 싶다면 함수를 사용할 수 있습니다. 그룹().

텍스트의 일부를 Re 라이브러리로 바꾸기

텍스트를 바꾸려면 다음 기능을 사용하십시오. re.sub(). 코스 목록이 약간 변경되었다고 가정해 보겠습니다. 각 디지털 값 뒤에 탭이 있음을 알 수 있습니다. 우리의 임무는 이 모든 시퀀스를 한 줄로 결합하는 것입니다. 이렇게 하려면 표현식 s+를 바꿔야 합니다. 통과하는 

원본 텍스트는 다음과 같습니다.

# 텍스트로 변수 생성

>>> 텍스트 = """100 INF t 정보학

213 MAT t 수학  

156 ENG t 영어»»»  

>>> 인쇄(텍스트)  

100 정보 정보학

213 매트 수학  

156 중앙 영어

원하는 작업을 수행하기 위해 다음 코드 줄을 사용했습니다.

# 하나 이상의 공백을 1로 바꿉니다.

>>> 정규식 = re.compile('s+')  

>>> print(regex.sub(' ', 텍스트))  

결과적으로 하나의 줄이 있습니다. 

101 COM 컴퓨터 205 MAT 수학 189 ENG 영어

이제 다른 문제를 고려하십시오. 우리는 공간을 배치하는 작업에 직면하지 않습니다. 모든 코스 이름이 새 줄에서 시작하는 것이 훨씬 더 중요합니다. 이를 위해 예외에 개행을 추가하는 다른 표현식이 사용됩니다. 이것은 어떤 표현입니까?

도서관 Re 네거티브 매칭과 같은 기능을 지원합니다. 슬래시 앞에 느낌표가 있다는 점에서 직접형과 다릅니다. 즉, 개행 문자를 건너뛸 필요가 있으면 n 대신 !n을 써야 합니다.

우리는 다음 코드를 얻습니다.

# 개행을 제외한 모든 공백 제거  

>>> 정규식 = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', 텍스트))  

100 INF 정보학

213 MAT 수학  

156 영어

정규식 그룹이란 무엇입니까?

정규식 그룹의 도움으로 원하는 개체를 한 줄이 아닌 별도의 요소 형태로 얻을 수 있습니다. 

과정 번호, 코드 및 이름을 한 줄이 아닌 별도의 요소로 가져와야 한다고 가정합니다. 작업을 완료하려면 엄청난 수의 불필요한 코드 라인을 작성해야 합니다. 

실제로 작업을 크게 단순화할 수 있습니다. 모든 항목에 대한 템플릿을 컴파일하고 대괄호에서 가져와야 하는 데이터를 지정할 수 있습니다.

아주 적은 수의 줄이 있을 것입니다. 

# 코스 텍스트 템플릿 그룹을 만들고 추출

>>> 코스 패턴 = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(코스 패턴, 텍스트)  

[('100', 'INF', '컴퓨터과학'), ('213', 'MAT', '수학'), ('156', 'ENG', '영어')]

"greedy" 매칭의 개념

표준에 따라 정규식은 일치하는 데이터의 최대량을 추출하도록 프로그래밍됩니다. 그리고 훨씬 덜 필요하더라도.

태그를 가져와야 하는 샘플 HTML 코드를 살펴보겠습니다.

>>> text = "탐욕적인 정규 표현식 매칭의 예"  

>>> re.findall('', 텍스트)  

['그리디 정규식 매칭의 예']

하나의 태그만 추출하는 대신 Python은 전체 문자열을 얻었습니다. 그래서 욕심이라고 합니다.

그리고 태그만 얻으려면 어떻게 해야 할까요? 이 경우 지연 일치를 사용해야 합니다. 이러한 표현식을 지정하기 위해 패턴 끝에 물음표가 추가됩니다.

다음 코드와 인터프리터의 출력을 얻을 수 있습니다.

>>> re.findall('', 텍스트)  

[", "]

처음 발생한 항목만 가져와야 하는 경우 메서드가 사용됩니다. 검색 ().

re.search('', 텍스트).그룹()  

"

그러면 여는 태그만 찾을 수 있습니다.

인기 있는 표현식 템플릿

다음은 가장 일반적으로 사용되는 정규식 패턴을 포함하는 표입니다.

.NET에서 Python 3용 Re 모듈에 대한 문서입니다. 정규 표현식을 위한 Re 모듈

결론

우리는 정규 표현식 작업을 위한 가장 기본적인 방법만을 고려했습니다. 어쨌든, 당신은 그것들이 얼마나 중요한지 보았습니다. 그리고 여기에서는 전체 텍스트 또는 개별 단편을 구문 분석해야 하는지, 소셜 네트워크의 게시물을 분석해야 하는지 또는 나중에 처리하기 위해 데이터를 수집해야 하는지 여부에 차이가 없습니다. 정규식은 이 문제에서 신뢰할 수 있는 도우미입니다.

다음과 같은 작업을 수행할 수 있습니다.

  1. 이메일 주소 또는 전화번호와 같은 데이터 형식 지정.
  2. 문자열을 가져와 여러 개의 작은 문자열로 분할합니다.
  3. 검색, 필요한 정보 추출 또는 문자의 일부 교체와 같은 텍스트로 다양한 작업을 수행합니다.

정규 표현식을 사용하면 사소한 작업도 수행할 수 있습니다. 언뜻보기에이 과학을 마스터하는 것은 쉽지 않습니다. 그러나 실제로는 모든 것이 표준화되어 있으므로 한 번만 알아내면 충분합니다. 그 후에 이 도구는 Python뿐만 아니라 다른 프로그래밍 언어에서도 사용할 수 있습니다. Excel에서도 정규식을 사용하여 데이터 처리를 자동화합니다. 따라서 이 도구를 사용하지 않는 것은 죄입니다.

댓글을 남겨주세요.