English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 정규 표현식(RegEx)을 배우고, Python의 re 모듈과 함께 RegEx를 사용하며(예제를 통해) 배우게 됩니다.
정규 표현식(RegEx)은 검색 패턴을 정의하는 문자열입니다. 예를 들어,
^a...s$
위의 코드는 RegEx 패턴을 정의합니다. 패턴은 다음과 같습니다:로a로 시작하고s으로 끝나는어떤 다섯 글자 문자열。
RegEx로 정의된 패턴은 문자열과 일치할 수 있습니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
^a...s$ | 절대값 | 일치 없음 |
별명 | 일치 | |
abyss | 일치 | |
별명 | 일치 없음 | |
계산기 | 일치 없음 |
Python에 reRegEx라는 모듈이 있습니다. 예제를 보겠습니다:
import re pattern = '^a...s$' test_string = 'abyss' result = re.match(pattern, test_string) if result: print("찾았습니다.") else: print("찾지 못했습니다.")
여기서는 re.match() 함수를 사용하여 테스트 문자열에서 패턴을 검색합니다. 검색이 성공하면 이 메서드는 일치 객체를 반환합니다. 그렇지 않으면 None을 반환합니다.
re모듈에서는 다른 몇 가지 함수를 정의했으며, RegEx와 함께 사용할 수 있습니다. 탐구하기 전에, 정규 표현식 자체를 배워보겠습니다.
RegEx 기본 지식을 알고 계신다면, 다음으로 이동하세요Python RegEx。
정규 표현식을 지정하기 위해 메타 기호가 사용되었습니다. 위의 예제에서는 ^와 $가 메타 기호입니다.
원자어는 규칙식 정규 표현식 엔진이 특별한 방식으로 해석하는 문자입니다。
[] . ^ $ * + ? {} () \ |
[] - 괄호
원자어
표현식 | 문자열 | 일치하나요? |
---|---|---|
괄호는 규칙식 정규 표현식에서 특별한 의미를 가진 문자를 나타냅니다. 다음은 원자어 목록입니다: | a | 1개 일치 |
ac | 2개 일치 | |
[abc] | 일치 없음 | |
Hey Jude | 5개 일치 |
abc de ca
여기서, [abc]은-괄호 내의 문자 범위.
[a-e]와 같은 [abcde]。
[1-4]와 같은 [1234]
[0-39]와 같은 [01239]
밑줄 ^를 사용하여 괄호의 시작에 삽입 기호를 사용하여 문자 집합을 보완(반전)할 수 있습니다.
[^abc]은a또는b또는c밖에 없는의어떤 문자.
[^0-9]는 어떤 비숫자 문자를 나타냅니다.
.- 점
점은 어떤 단일 문자(엔터 문자 '\n' 제외)와 일치합니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
.. | a | 일치 없음 |
ac | 1개 일치 | |
acd | 1개 일치 | |
acde | 2개의 일치(포함)4개의 문자) |
^- 삽입 기호
삽입 기호 ^는 문자열이 특정 문자로 시작하는지 확인하는 데 사용됩니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
^a | a | 1개 일치 |
abc | 1개 일치 | |
bac | 일치 없음 | |
^ab | abc | 1개 일치 |
acb | 일치하지 않음(시작, a 뒤에 b가 없음) |
$- 달러
달러 기호 $는 문자열이로특정 문자로 시작끝。
표현식 | 문자열 | 일치하나요? |
---|---|---|
a$ | a | 1개 일치 |
formula | 1개 일치 | |
cab | 일치 없음 |
*- 별표
별표 기호*일치또는 여러 개의 나머지 패턴.
표현식 | 문자열 | 일치하나요? |
---|---|---|
ma*n | mn | 1개 일치 |
man | 1개 일치 | |
maaan | 1개 일치 | |
main | 일치하지 않음(a 뒤에 n이 없음) | |
woman | 1개 일치 |
+- 더하기 기호
더하기 기호는+일치하나나 여러 개의 나머지 패턴.
표현식 | 문자열 | 일치하나요? |
---|---|---|
ma+n | mn | 일치하지 않음(a 문자가 없음) |
man | 1개 일치 | |
maaan | 1개 일치 | |
main | 일치하지 않음(a 뒤에 n) | |
woman | 1개 일치 |
?- 문자표시
문자표시 ?는또는 하나의 출현의 나머지 패턴.
표현식 | 문자열 | 일치하나요? |
---|---|---|
ma?n | mn | 1개 일치 |
man | 1개 일치 | |
maaan | 일치하지 않음(한 개 이상의 a 문자) | |
main | 일치하지 않음(a 뒤에 n) | |
woman | 1개 일치 |
{}- 대括호
다음 코드를 고려해 보세요: {n,m}。이는 최소n개스타일이며 최대m개스타일.
표현식 | 문자열 | 일치하나요? |
---|---|---|
a{2,3} | abc dat | 일치 없음 |
abc daat | 1개의 일치(위에) daat | |
aabc daaat | 2개의 일치(위에 위치)aabc와) daaat | |
aabc daaaat | 2개의 일치(위에 위치)aabc와) daaaat |
다시 한 번 시도해 보겠습니다. RegEx [0-9]{2, 4}은 최소2위치이지만 최대4위치
표현식 | 문자열 | 일치하나요? |
---|---|---|
[0-9]{2,4} | ab123csde | 1개의 일치(위에 일치) ab123csde |
12 and 345673 | 2개 일치 항목(())12 and 345673 | |
1 and 2 | 일치 없음 |
|- 구분선
구분선|은 교차 표시(또는 연산자)를 위해 사용됩니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
a|b | cde | 일치 없음 |
ade | 1개의 일치(위에 일치)ade) | |
acdbea | 3개 일치 항목(())acdbea |
이곳에서, a|b은a또는b의문자열
()- 구조화된 문자열
구조화된 문자열()는 자식 패턴을 그룹화하는 데 사용됩니다. 예를 들어, (a|b|c)xz는a또는b또는c匹配且后跟xz的문자열
표현식 | 문자열 | 일치하나요? |
---|---|---|
(a|b|c)xz | ab xz | 일치 없음 |
abxz | 1个匹配(在处匹配)abxz | |
axz cabxz | 2개 일치 항목(())axzbc cabxz |
\- 反斜杠
反斜杠\用于转义包括所有元字符在内的各种字符。例如,
\$a如果字符串包含$后跟则匹配a。在此,$RegEx引擎不会以特殊方式对其进行解释。
如果不确定某个字符是否具有特殊含义,可以将其\放在前面。这样可以确保不对字符进行特殊处理。
특수 시퀀스
특수 시퀀스는 일반적인 패턴을 쉽게 작성하는 데 도움이 됩니다. 특수 시퀀스 목록은 다음과 같습니다:
\A -지정된 문자가 문자열의 시작에 있으면 일치합니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
\Athe | the sun | 일치 |
In the sun | 일치 없음 |
\b -단어의 시작이나 끝에 있으면 일치합니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
\bfoo | football | 일치 |
a football | 일치 | |
afootball | 일치 없음 | |
foo\b | the foo | 일치 |
the afoo test | 일치 | |
the afootest | 일치 없음 |
\B-와 \b. 지정된 문자가아니요단어의 시작이나 끝에 있으면 일치합니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
\Bfoo | football | 일치 없음 |
a football | 일치 없음 | |
afootball | 일치 | |
foo\B | the foo | 일치 없음 |
the afoo test | 일치 없음 | |
the afootest | 일치 |
\d-모든 십진수 문자를 일치시킵니다. [0-9]
표현식 | 문자열 | 일치하나요? |
---|---|---|
\d | 12abc3 | 3개 일치 항목(())12abc3 |
파이썬 | 일치 없음 |
\D-모든 십진수가 아닌 문자를 일치시킵니다. [^0-9]
표현식 | 문자열 | 일치하나요? |
---|---|---|
\D | 1ab34"50 | 3개 일치 항목(())1ab34"50 |
1345 | 일치 없음 |
\s-문자열이 비백스페이스 문자를 포함하는 모든 위치를 일치시킵니다. [ \t\n\r\f\v]에 해당합니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
\s | Python RegEx | 1개 일치 |
PythonRegEx | 일치 없음 |
\S-문자열이 비백스페이스 문자를 포함하는 모든 위치를 일치시킵니다. [^ \t\n\r\f\v]에 해당합니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
\S | a b | 2개 일치 항목(()) a b |
일치 없음 |
\w-모든 문자와 숫자(숫자와 문자)를 일치시킵니다. [a-zA-Z0-9_]。다른 말로, 밑줄 '_'는 문자와 숫자 문자로 간주됩니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
\w | 12&": ;c | 3개 일치 항목(())12&": ;c |
%"> ! | 일치 없음 |
\W-모든 알파벳과 숫자가 아닌 문자를 일치시킵니다. [^a-zA-Z0-9_]
표현식 | 문자열 | 일치하나요? |
---|---|---|
\W | 1a2%c | 1개 일치(())1a2%c |
파이썬 | 일치 없음 |
\Z -지정된 문자가 문자열의 끝에 있으면 일치합니다.
표현식 | 문자열 | 일치하나요? |
---|---|---|
\ZPython | 저는 Python을 좋아합니다 | 1개 일치 |
저는 Python을 좋아합니다 | 일치 없음 | |
Python은 재미 있습니다. | 일치 없음 |
힌트:규칙 표현식을 구축하고 테스트하기 위해 RegEx 테스트 도구를 사용할 수 있습니다. 예를 들어,regex이 도구는 규칙 표현식을 생성하고 배우는 데 도움을 줄 수 있습니다.
지금, 규칙 표현식(RegEx)의 기본 개념을 이해하게 되었습니다. 이제 Python 코드에서 규칙 표현식을 어떻게 사용하는지 논의해 보겠습니다.
Python에는 re라는 정규 표현식 모듈이 있습니다. 사용하려면 모듈을 가져와야 합니다.
import re
이 모듈은 RegEx와 함께 사용할 수 있는 함수와 상수를 정의합니다.
re.findall() 메서드는 모든 일치하는 항목을 포함한 문자열 목록을 반환합니다.
# 문자열에서 숫자를 추출하는 프로그램 import re string = 'hello 12 hi 89. Howdy 34' pattern = '\d'+' result = re.findall(pattern, string,) print(result) # 출력: ['12', ''89', ''34]
모드를 찾지 못하면 re.findall()는 공백 목록을 반환합니다.
split 메서드는 일치하는 문자열을 분할하고 분할된 문자열 목록을 반환합니다.
import re string = 'Twelve:12 Eighty nine:89. pattern = '\d'+' result = re.split(pattern, string) print(result) # 출력: ['Twelve:', 'Eighty nine:', '.']
모드를 찾지 못하면 re.split()는 공백 문자열을 포함한 목록을 반환합니다.
maxsplit 매개변수를 re.split() 메서드에 전달할 수 있습니다. 이는 발생할 수 있는 최대 분할 횟수입니다.
import re string = 'Twelve:12 Eighty nine:89 Nine:9. pattern = '\d'+' # maxsplit = 1 # 첫 번째 일치하는 위치에서만 분할 result = re.split(pattern, string,) 1) print(result) # 출력: ['Twelve:', 'Eighty nine:']89 Nine:9.']
顺便说一下,maxsplit 기본값은 0입니다;기본값은 0입니다. 모든 일치하는 결과를 분할하는 것을 의미합니다.
re.sub()의 문법:
re.sub(pattern, replace, string)
이 메서드는 일치하는 항목이 replace 변수의 내용으로 대체된 문자열을 반환합니다.
# 모든 공백을 제거하는 프로그램 import re # 다중 행 문자열 string = 'abc 12\ de 23 \n f45 6' # 모든 공백 문자를 매칭 pattern = '\s+' # 빈 문자열 replace = '' new_string = re.sub(pattern, replace, string) print(new_string) # 출력: abc12de23f456
모드를 찾지 못하면 re.sub()는 원래 문자열을 반환합니다.
이를 통해 설정할 수 있습니다.count이 메서드의 네 번째 매개변수로 전달됩니다. 생략하면 결과가 0입니다. 모든 일치하는 항목을 대체합니다.
import re # 다중 행 문자열 string = 'abc 12\ de 23 \n f45 6' # 모든 공백 문자를 매칭 pattern = '\s+' replace = '' new_string = re.sub(r'\s'+', replace, string, 1) print(new_string) # 출력: # abc12de 23 # f45 6
re.subn()는 re.sub()와 유사하게, 그것이 반환하는 것을 기대합니다.2개의 항목을 포함하는 튜플로 반환합니다. 새로운 문자열과 대체 횟수를 포함합니다.
# 모든 공백을 제거하는 프로그램 import re # 다중 행 문자열 string = 'abc 12\ de 23 \n f45 6' # 모든 공백 문자를 매칭 pattern = '\s+' # 빈 문자열 replace = '' new_string = re.subn(pattern, replace, string) print(new_string) # 출력: ('abc12de23f456', 4)
re.search() 메서드는 두 개의 매개변수를 취합니다: 패턴과 문자열. 이 메서드는 문자열에서 RegEx 패턴과 일치하는 첫 번째 위치를 찾습니다.
검색이 성공하면 re.search()는 매칭 객체를 반환합니다. 성공하지 않으면 None을 반환합니다.
match = re.search(pattern, str)
import re string = "Python is fun" # "Python"이 시작부분에 있는지 확인 match = re.search('\APython', string) if match: print("pattern found inside the string") else: print("pattern not found") # 출력: pattern found inside the string
여기서,matchmatch 객체를 포함합니다.
매칭 객체를 사용하여dir()매칭 객체의 메서드와 속성을 얻는 함수
매칭 객체의 일반적인 메서드와 속성은 다음과 같습니다:
group() 메서드는 문자열에서 매칭된 부분을 반환합니다.
import re string = '39801 356, 2102 1111' # 세자리 숫자, 뒤에 공백, 두자리 숫자 pattern = '(\d{3}) (\d{2})' # match 변수는 Match 객체를 포함합니다. match = re.search(pattern, string) if match: print(match.group()) else: print("pattern not found") # 출력: 801 35
여기서,match변수는 match 객체를 포함합니다.
우리의 패턴(\d{3) (\d{2)는 두 서브 그룹(\d{3)와(\d{2)。이러한 괄호를 포함한 서브 그룹의 문자열 일부를 얻을 수 있습니다. 이렇게 됩니다:
>>> match.group(1) '801' >>> match.group(2) '35' >>> match.group(1, 2) ('801', ''35) >>> match.groups() ('801', ''35)
start() 함수는 매칭의 서브 문자열의 시작 인덱스를 반환합니다. 마찬가지로, end()은 매칭의 서브 문자열의 끝 인덱스를 반환합니다。
>>> match.start() 2 >>> match.end() 8
span() 함수는 시작과 끝 인덱스를 포함한 매칭 부분의 튜플을 반환합니다。
>>> match.span() (2, 8)
匹配对象的re属性返回一个正则表达式对象。 同样,string属性返回传递的字符串。
>>> match.re re.compile('(\\d{3}) (\d{2})') >>> match.string '39801 356, 2102 1111'
우리는 re 모듈에서 정의된 모든 일반적인 메서드를 소개했습니다. 더 많은 정보를 원하면 방문해 주세요파이썬 3 re 모듈。
정규 표현식 전에 사용하면r또는R원시 문자열을 의미합니다. 예를 들어, '\n'은 새 줄이고 r'\n'은 두 문자를 의미합니다: 반사각선\ 뒤에 n.
반사각선\는 모든 메타 문자를 포함한 다양한 문자를 escape합니다. 하지만, 접두사를 사용하면r접두사\는 그를 일반 문자로 간주합니다.
import re string = '\n and \r are escape sequences.' result = re.findall(r'[\n\r]', string) print(result) # 출력: ['\n', '\r']