python
이 자습서에서는 정규식(RegEx)에 대해 배우고 Python의 re 모듈을 사용하여 RegEx로 작업합니다(예제를 통해).
등록 ular 예 pression(RegEx)은 검색 패턴을 정의하는 일련의 문자입니다. 예를 들어,
^a...s$
위의 코드는 RegEx 패턴을 정의합니다. 패턴은 다음과 같습니다. a로 시작하는 5자리 문자열 s로 끝나는 .
RegEx를 사용하여 정의된 패턴을 사용하여 문자열과 일치시킬 수 있습니다.
표현식 | 문자열 | 일치합니까? |
---|---|---|
^a...s$ | abs | 일치하지 않음 |
alias | 일치 | |
abyss | 일치 | |
Alias | 일치하지 않음 | |
An abacus | 일치하지 않음 |
Python에는 re
라는 모듈이 있습니다. RegEx와 함께 작동합니다. 다음은 예입니다.
import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
print("Search successful.")
else:
print("Search unsuccessful.")
여기에서는 re.match()
을 사용했습니다. 패턴 검색 기능 test_string 내 . 이 메서드는 검색에 성공하면 일치 개체를 반환합니다. 그렇지 않으면 None
를 반환합니다. .
re에 정의된 다른 여러 기능이 있습니다. RegEx와 함께 작동하는 모듈. 알아보기 전에 정규식 자체에 대해 알아보겠습니다.
RegEx의 기본 사항을 이미 알고 있다면 Python RegEx로 이동하십시오.
<시간>
정규식을 지정하기 위해 메타 문자가 사용됩니다. 위의 예에서 ^
및 $
메타 문자입니다.
메타 문자는 RegEx 엔진에 의해 특별한 방식으로 해석되는 문자입니다. 다음은 메타 문자 목록입니다.
[] . ^ $ * + ? {} () \ |
<시간>
[]
- 대괄호
대괄호는 일치시킬 문자 집합을 지정합니다.
표현식 | 문자열 | 일치합니까? |
---|---|---|
[abc] | a | 1 경기 |
ac | 2경기 | |
Hey Jude | 일치하지 않음 | |
abc de ca | 5경기 |
여기 [abc]
일치시키려는 문자열에 a
, b
또는 c
.
-
를 사용하여 문자 범위를 지정할 수도 있습니다. 대괄호 안에.
[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 | 일치하지 않음 |
*
- 별표
별표 기호 *
0개 이상의 발생과 일치 패턴이 남아 있습니다.
표현식 | 문자열 | 일치합니까? |
---|---|---|
ma*n | mn | 1 경기 |
man | 1 경기 | |
maaan | 1 경기 | |
main | 일치하지 않음(a 뒤에 n 가 오지 않습니다. ) | |
woman | 1 경기 |
+
- 플러스
더하기 기호 +
하나 이상의 발생과 일치 패턴이 남아 있습니다.
표현식 | 문자열 | 일치합니까? |
---|---|---|
ma+n | mn | 일치하지 않음(a 없음) 문자) |
man | 1 경기 | |
maaan | 1 경기 | |
main | 일치 없음(다음에 n이 오지 않음) | |
woman | 1 경기 |
?
- 물음표
물음표 기호 ?
0 또는 1회 발생과 일치 패턴이 남아 있습니다.
표현식 | 문자열 | 일치합니까? |
---|---|---|
ma?n | mn | 1 경기 |
man | 1 경기 | |
maaan | 일치하지 않음(둘 이상의 a 문자) | |
main | 일치 없음(다음에 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 ) |
한 가지 더 예를 들어 보겠습니다. 이 정규식 [0-9]{2, 4}
2자리 이상 4자리 이하 일치
표현식 | 문자열 | 일치합니까? |
---|---|---|
[0-9]{2,4} | ab123csde | 1개 일치(ab123csde 에서 일치) ) |
12 and 345673 | 3개 일치(12 , 3456 , 73 ) | |
1 and 2 | 일치하지 않음 |
|
- 대체
세로 막대 |
교대로 사용됩니다(or
연산자).
표현식 | 문자열 | 일치합니까? |
---|---|---|
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
- 모든 10진수와 일치합니다. [0-9]
과 동일
표현식 | 문자열 | 일치합니까? |
---|---|---|
\d | 12abc3 | 3개 일치(12abc3 에서) ) |
Python | 일치하지 않음 |
\D
- 10진수가 아닌 모든 숫자와 일치합니다. [^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 에서) ) |
Python | 일치하지 않음 |
\Z
- 지정된 문자가 문자열의 끝에 있는 경우 일치합니다.
표현식 | 문자열 | 일치합니까? |
---|---|---|
Python\Z | I like Python | 1 경기 |
I like Python Programming | 일치하지 않음 | |
Python is fun. | 일치하지 않음 |
도움말: 정규식을 빌드하고 테스트하려면 regex101과 같은 RegEx 테스터 도구를 사용할 수 있습니다. 이 도구는 정규식을 만드는 데 도움이 될 뿐만 아니라 학습에도 도움이 됩니다.
이제 RegEx의 기본 사항을 이해했으므로 Python 코드에서 RegEx를 사용하는 방법에 대해 논의해 보겠습니다.
<시간>
Python에는 re
라는 모듈이 있습니다. 정규 표현식으로 작업합니다. 이를 사용하려면 모듈을 가져와야 합니다.
import re
모듈은 RegEx와 함께 작동하는 여러 함수와 상수를 정의합니다.
<시간>
re.findall()
메서드는 모든 일치 항목을 포함하는 문자열 목록을 반환합니다.
# Program to extract numbers from a string
import re
string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result)
# Output: ['12', '89', '34']
패턴을 찾을 수 없는 경우 re.findall()
빈 목록을 반환합니다.
re.split
메소드는 일치하는 문자열을 분할하고 분할이 발생한 문자열의 목록을 반환합니다.
import re
string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result)
# Output: ['Twelve:', ' Eighty nine:', '.']
패턴을 찾을 수 없는 경우 re.split()
원래 문자열을 포함하는 목록을 반환합니다.
maxsplit
를 통과할 수 있습니다. re.split()
에 대한 인수 방법. 발생할 최대 분할 수입니다.
import re
string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'
# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1)
print(result)
# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']
참고로 maxsplit
의 기본값은 는 0입니다. 가능한 모든 분할을 의미합니다.
re.sub()
구문 입니다:
re.sub(pattern, replace, string)
이 메서드는 일치하는 항목이 replace의 내용으로 대체되는 문자열을 반환합니다. 변수.
<시간>
# Program to remove all whitespaces
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
# empty string
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string)
# Output: abc12de23f456
패턴을 찾을 수 없는 경우 re.sub()
원래 문자열을 반환합니다.
count를 전달할 수 있습니다. re.sub()
의 네 번째 매개변수로 방법. 생략하면 0이 됩니다. 모든 항목을 대체합니다.
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
replace = ''
new_string = re.sub(r'\s+', replace, string, 1)
print(new_string)
# Output:
# abc12de 23
# f45 6
<시간>
re.subn()
re.sub()
과 유사합니다. 단, 새 문자열과 대체 횟수를 포함하는 2개 항목의 튜플을 반환합니다.
# Program to remove all whitespaces
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
# empty string
replace = ''
new_string = re.subn(pattern, replace, string)
print(new_string)
# Output: ('abc12de23f456', 4)
<시간>
re.search()
메소드는 패턴과 문자열의 두 가지 인수를 취합니다. 이 메서드는 RegEx 패턴이 문자열과 일치하는 첫 번째 위치를 찾습니다.
검색에 성공하면 re.search()
일치 개체를 반환합니다. 그렇지 않으면 None
을 반환합니다. .
match = re.search(pattern, str)
<시간>
import re
string = "Python is fun"
# check if 'Python' is at the beginning
match = re.search('\APython', string)
if match:
print("pattern found inside the string")
else:
print("pattern not found")
# Output: pattern found inside the string
여기, 일치 일치 개체를 포함합니다.
<시간>dir() 함수를 사용하여 일치 개체의 메서드 및 속성을 가져올 수 있습니다.
일반적으로 사용되는 일치 개체의 일부 메서드 및 속성은 다음과 같습니다.
<시간>
group()
메소드는 일치하는 문자열 부분을 반환합니다.
import re
string = '39801 356, 2102 1111'
# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'
# match variable contains a Match object.
match = re.search(pattern, string)
if match:
print(match.group())
else:
print("pattern not found")
# Output: 801 35
여기, 일치 변수에 일치 개체가 있습니다.
우리의 패턴 (\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
에 정의된 일반적으로 사용되는 모든 메서드를 다루었습니다. 기준 치수. 자세히 알아보려면 Python 3 re 모듈을 방문하세요.
r일 때 또는 R 접두사는 정규식 앞에 사용되며 원시 문자열을 의미합니다. 예:'\n'
r'\n'
는 새 줄이지만 두 문자를 의미합니다. 백슬래시 \
뒤에 n
.
백래시 \
모든 메타 문자를 포함한 다양한 문자를 이스케이프하는 데 사용됩니다. 그러나 r을 사용하면 접두사는 \
을 만듭니다. 일반 캐릭터로 취급합니다.
import re
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string)
print(result)
# Output: ['\n', '\r']
python
파이썬에서 정규 표현식이란 무엇입니까? 정규 표현식(RE) 프로그래밍 언어에서 는 검색 패턴을 설명하는 데 사용되는 특수 텍스트 문자열입니다. 코드, 파일, 로그, 스프레드시트 또는 문서와 같은 텍스트에서 정보를 추출하는 데 매우 유용합니다. Python 정규식을 사용하는 동안 가장 먼저 인식해야 할 것은 모든 것이 본질적으로 문자이며 문자열이라고도 하는 특정 문자 시퀀스와 일치하는 패턴을 작성한다는 것입니다. ASCII 또는 라틴 문자는 키보드에 있는 문자이며 유니코드는 외래 텍스트와 일치하는 데 사용됩니다. 여기에는 숫자와
놓치신 경우:Python 2는 2020년 1월 1일부로 공식적으로 지원되지 않음 . 아직 Python 2.7을 사용 중이라면 지금 업그레이드하세요. . 실행 중인 버전이 확실하지 않은 경우 Python 버전을 확인하세요. 많은 패키지 유지 관리자가 Python 3으로 마이그레이션했습니다. 일부는 여전히 Python 2를 지원하고 다른 일부는 이미 Python 2 지원을 중단했습니다. Python 2 코드 기반에서 마이그레이션해야 하는 경우 Python 코드를 Python 3으로 마이그레이션하는 방법에 대한 가이드를 읽어보세요.