Python의 정규식 [예제 포함]: 구현 방법?
게시 됨: 2021-01-29모든 소스에서 원시 데이터를 처리하는 동안 데이터에서 의미 있는 통찰력을 얻을 수 있도록 올바른 정보를 추출하는 것이 중요합니다. 때로는 특히 텍스트 데이터의 경우 데이터에서 특정 패턴을 추출하기가 어려워집니다.
텍스트 데이터는 설문조사 양식, 스크랩 웹사이트 및 기타 출처를 통해 수집된 정보 단락으로 구성됩니다. pandas 함수 또는 기타 사용자 정의 함수를 사용하여 다른 문자열 접근자를 채닝하면 작업을 완료할 수 있지만 보다 구체적인 패턴을 얻어야 하는 경우에는 어떻게 해야 합니까? 정규식은 이 작업을 쉽게 수행합니다.
목차
정규식(RegEx)이란 무엇입니까?
정규식은 문자열에 대한 문자 집합의 표현입니다. 데이터 풀에서 올바른 정보를 분리하는 데 도움이 되는 문자열의 특정 패턴에 대한 일반화된 공식을 제공합니다. 이 표현은 일반적으로 규칙을 구성하는 데 도움이 되는 기호나 문자로 구성되어 있지만 언뜻 보기에는 이상하고 이해하기 어려워 보일 수 있습니다. 이러한 기호에는 여기에 설명된 관련 의미가 있습니다.
세계 최고의 대학에서 데이터 과학 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
RegEx의 메타 문자
- '.': 와일드카드이며 단일 문자와 일치합니다(모든 문자, 단 한 번만).
- ^: 문자열의 시작을 나타냅니다.
- $: 문자열의 끝을 나타냅니다.
- [ ]: [ ] 내의 문자 집합 중 하나와 일치
- [az]: 문자 범위, b,…,z 중 하나와 일치
- [^abc] : b, c가 아닌 문자와 일치합니다.
- a|b: 또는 b와 일치합니다. 여기서 및 b는 문자열입니다.
- () : 연산자에 대한 범위를 제공합니다.
- \ : 특수 문자(\t, \n, \b, \.)에 대한 이스케이프를 활성화합니다.
- \b: 단어 경계와 일치
- \d : [0-9]에 해당하는 임의의 숫자
- \D: [^0-9]에 해당하는 숫자가 아닌 모든 것
- \s : [ \t\n\r\f\v]에 해당하는 모든 공백
- \S : [^\t\n\r\f\v]에 해당하는 공백이 아닌 모든 것
- \w : [a-zA-Z0-9_]에 해당하는 모든 영숫자
- \W : [^a-zA-Z0-9_]에 해당하는 영숫자가 아닌 모든
- '*': 0개 이상의 항목과 일치합니다.
- '+': 하나 이상의 항목과 일치합니다.
- '?': 0개 또는 1개의 항목과 일치합니다.
- {n}: 정확히 n회 반복, n>=0
- {n,}: 최소 n회 반복
- {,n}: 최대 n회 반복
- {m,n}: 최소 m 반복 및 최대 n 반복
해결 방법을 이해하기 위한 예
이제 RegEx를 구성하는 문자를 알았으므로 이것이 어떻게 작동하는지 봅시다.
1. 이메일 필터링:
긴 단락에서 모든 이메일 ID를 걸러내려고 한다고 가정합니다. 이메일의 일반적인 형식은 다음과 같습니다.
사용자 이름@도메인_이름. <상위_레벨_도메인>
사용자 이름은 영숫자일 수 있으므로 \w를 사용하여 나타낼 수 있지만 사용자가 계정을 firstName.surname으로 생성할 가능성이 있습니다. 이 문제를 해결하기 위해 점을 이스케이프 처리하고 문자 집합을 만듭니다. 다음으로 domain_name은 영문자여야 하므로 A-Za-z가 이를 나타냅니다. 최상위 도메인은 일반적으로 .com, .in, .org이지만 사용 사례에 따라 전체 알파벳 범위를 선택하거나 특정 도메인을 필터링할 수 있습니다.
이것의 정규식은 다음과 같을 것입니다:
^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$
여기에서 패턴의 시작과 끝도 선언되며 최상위 도메인은 2-4자만 포함할 수 있습니다. 전체 표현식에는 3개의 그룹이 있습니다.
2. 날짜 필터링:
추출하는 텍스트 정보에는 날짜가 포함될 수 있으며 별도의 열이 제공되지 않습니다. 날짜는 데이터 필터링 또는 시계열 분석에 도움이 되는 필수 요소입니다. 특정 날짜는 날짜/월/년 형식을 취하며, 여기서 날짜와 월은 서로 바뀔 수 있습니다.
또한 월은 숫자 및 알파벳 형식이 될 수 있으며 알파벳은 약어 또는 전체 이름일 수 있습니다. 이는 주로 데이터에 얼마나 많은 사례가 있는지에 따라 달라지며 적중 및 재판을 통해서만 달성할 수 있습니다.

다양한 날짜를 다루는 간단한 RegEx가 아래에 나와 있습니다.
^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$
이 패턴은 하이픈이나 슬래시를 사용하여 날짜 형식을 캡처합니다. 날짜와 월은 한 자리 또는 두 자리로 제한되고 연도는 최대 40자리로 제한됩니다. 각 엔터티는 이 경우 선택 사항인 그룹으로 캡처됩니다.
또한 읽기: Python 프로젝트 아이디어 및 주제
파이썬에서 어떻게 구현합니까?
우리가 방금 구축한 정규식은 우리가 가정한 각 기준을 충족하고 있으며 이제 이를 Python 코드로 구현할 때입니다. Python에는 이러한 표현식의 작업을 구현하는 re 모듈이라는 내장 모듈이 있습니다. 간단히,
다시 수입
패턴 = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'
Re 모듈은 다양한 기능을 제공하며 모두 사용 사례가 다릅니다. 몇 가지 중요한 기능을 살펴보겠습니다.
- re.findall(): 이 함수는 전달된 패턴을 기반으로 테스트 문자열의 모든 일치 목록을 반환합니다. 다음 예를 고려하십시오.
string = '25-12-1999 임의의 텍스트가 여기에 25/12/1999'
print(re.findall(패턴, 문자열))
목록의 문자열에서 날짜만 반환합니다.
- re.sub(): 이 함수의 Sub는 대체를 나타내며 동일한 작업을 수행합니다. 일치 항목을 제공된 대체 값으로 대체합니다. 이 함수는 패턴, 문자열, 대체 값 및 개수의 선택적 매개변수를 사용합니다. count 매개변수는 교체하려는 발생 수를 제어합니다. 기본적으로 모두 대체하고 새 문자열을 반환합니다.
- re.split(): 일치하는 사이트에서 문자열을 분할하고 해당 부분을 별도의 문자열로 목록에 반환합니다.
- re.search(): 이 함수는 캡처한 모든 그룹과 함께 문자열에서 찾은 일치 항목을 포함하는 일치 개체를 반환합니다. 이러한 그룹을 별도의 열로 저장하려는 경우 유용할 수 있습니다.
이를 수행하려면:
일치 = re.search(패턴, 문자열)
match.group(1)
Group(0)은 전체 일치를 반환하고 해당하는 다음 숫자는 다른 그룹을 나타냅니다.
확인: 인도의 Python 개발자 급여
결론
정규식은 텍스트 데이터의 패턴을 캡처하는 강력한 방법입니다. 다양한 문자의 명령을 유지하는 데 약간의 추가 노력이 필요할 수 있지만 복잡한 사용 사례에서 데이터 추출 프로세스를 단순화합니다.
Python에서 정규 표현식의 몇 가지 예를 제공하십시오.
다음 예제는 Python의 기능 또는 정규 표현식을 보여줍니다.
ㅏ. 이메일 필터링
정규식은 이메일을 필터링하는 데 효율적으로 사용할 수 있습니다. 이메일 필터링의 일반 구문은 - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4}입니다. )$
이 표현식은 세 그룹으로 나뉘며 - 사용자 이름이 영숫자이고 점이 있는 경우(예: "first.last@")를 포함하여 많은 경우를 처리합니다. 이 표현식은 2-4자를 포함하는 상위 도메인에 사용됩니다.
비. 날짜 필터링
날짜는 데이터 필터링을 처리하는 동안 중요한 요소가 될 수 있습니다. 다루는 텍스트 데이터에는 날짜가 포함되어 있는 경우가 많습니다. 일반 텍스트에서 데이터를 추출하는 정규식 또는 RegEx는 - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
날짜와 월은 최대 2자리, 월은 최대 4자리까지 가능합니다.
Python에서 정규식 구현과 관련된 기능은 무엇입니까?
다음 함수는 Python에서 정규식 구현과 관련됩니다.
1. re.findall() - 이 함수는 텍스트 문자열과 일치시킬 패턴을 받아들입니다. 일치하는 문자열을 반환합니다.
2. re.sub() - "re.sub"의 Sub는 "대체"를 나타냅니다. 이 메소드는 "re.findall()" 함수가 수행하는 것과 정확히 동일한 기능을 수행합니다.
3. re.split() - 매개변수로 전달될 구분자 주위의 문자열을 구분합니다. 구분 기호는 무엇이든 될 수 있습니다.
4. re.search() - 이 함수는 캡처한 다른 문자열 그룹과 함께 문자열에서 찾은 일치 항목을 반환합니다.
정규식에 사용되는 특수 시퀀스는 무엇입니까?
다음은 정규식에 사용되는 몇 가지 특수 시퀀스입니다.
1. A: 문자열이 주어진 문자로 시작하는지 확인하십시오.
2. (슬래시) b: 문자열이 주어진 문자로 시작하거나 끝나는지 확인합니다. (문자열)/b는 시작을 확인하고 (백슬래시) b(문자열)는 끝을 확인합니다.
3. B: b와 정확히 반대입니다. 문자열이 주어진 문자로 시작하지 않는지 확인합니다.
4. d: 문자열에서 숫자 값을 확인합니다.
5. D: 숫자가 아닌 값이나 문자가 있는지 확인합니다.
6. s: 공백 문자가 있는지 확인합니다.
7. S: 공백이 아닌 문자가 있는지 확인합니다.
8. w: 영숫자 문자가 있는지 확인합니다.
9. W: 영숫자가 아닌 문자가 있는지 확인합니다.