English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python 기본 튜토리얼

Python 흐름 제어

Python 함수

Python 데이터 타입

Python 파일操作

Python 객체와 클래스

Python 날짜와 시간

Python 고급 지식

Python 참조 매뉴얼

Python 정규 표현식(RegEx)

이 튜토리얼에서는 정규 표현식(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

정규 표현식으로 패턴 지정

정규 표현식을 지정하기 위해 메타 기호가 사용되었습니다. 위의 예제에서는 ^와 $가 메타 기호입니다.

원자어

원자어는 규칙식 정규 표현식 엔진이 특별한 방식으로 해석하는 문자입니다。

[] . ^ $ * + ? {} () \ |

[] - 괄호

원자어

표현식문자열일치하나요?
괄호는 규칙식 정규 표현식에서 특별한 의미를 가진 문자를 나타냅니다. 다음은 원자어 목록입니다:a1개 일치
ac2개 일치
[abc]일치 없음
Hey Jude5개 일치

abc de ca

여기서, [abc]은-괄호 내의 문자 범위.

  • [a-e]와 같은 [abcde]。

  • [1-4]와 같은 [1234]

  • [0-39]와 같은 [01239]

밑줄 ^를 사용하여 괄호의 시작에 삽입 기호를 사용하여 문자 집합을 보완(반전)할 수 있습니다.

  • [^abc]은a또는b또는c밖에 없는어떤 문자.

  • [^0-9]는 어떤 비숫자 문자를 나타냅니다.

.-

점은 어떤 단일 문자(엔터 문자 '\n' 제외)와 일치합니다.

표현식문자열일치하나요?
..a일치 없음
ac1개 일치
acd1개 일치
acde2개의 일치(포함)4개의 문자)

^- 삽입 기호

삽입 기호 ^는 문자열이 특정 문자로 시작하는지 확인하는 데 사용됩니다.

표현식문자열일치하나요?
^aa1개 일치
abc1개 일치
bac일치 없음
^ababc1개 일치
acb일치하지 않음(시작, a 뒤에 b가 없음)

$- 달러

달러 기호 $는 문자열이특정 문자로 시작

표현식문자열일치하나요?
a$a1개 일치
formula1개 일치
cab일치 없음

*- 별표

별표 기호*일치또는 여러 개의 나머지 패턴.

표현식문자열일치하나요?
ma*nmn1개 일치
man1개 일치
maaan1개 일치
main일치하지 않음(a 뒤에 n이 없음)
woman1개 일치

+- 더하기 기호

더하기 기호는+일치하나나 여러 개의 나머지 패턴.

표현식문자열일치하나요?
ma+nmn일치하지 않음(a 문자가 없음)
man1개 일치
maaan1개 일치
main일치하지 않음(a 뒤에 n)
woman1개 일치

?- 문자표시

문자표시 ?는또는 하나의 출현의 나머지 패턴.

표현식문자열일치하나요?
ma?nmn1개 일치
man1개 일치
maaan일치하지 않음(한 개 이상의 a 문자)
main일치하지 않음(a 뒤에 n)
woman1개 일치

{}- 대括호

다음 코드를 고려해 보세요: {n,m}。이는 최소n개스타일이며 최대m개스타일.

표현식문자열일치하나요?
a{2,3}abc dat일치 없음
abc daat1개의 일치(위에) daat
aabc daaat2개의 일치(위에 위치)aabc와) daaat
aabc daaaat2개의 일치(위에 위치)aabc와) daaaat

다시 한 번 시도해 보겠습니다. RegEx [0-9]{2, 4}은 최소2위치이지만 최대4위치

표현식문자열일치하나요?
[0-9]{2,4}ab123csde1개의 일치(위에 일치) ab123csde
12 and 3456732개 일치 항목(())12 and 345673
1 and 2일치 없음

|- 구분선

구분선|은 교차 표시(또는 연산자)를 위해 사용됩니다.

표현식문자열일치하나요?
a|bcde일치 없음
ade1개의 일치(위에 일치)ade)
acdbea3개 일치 항목(())acdbea

이곳에서, a|b은a또는b의문자열

()- 구조화된 문자열

구조화된 문자열()는 자식 패턴을 그룹화하는 데 사용됩니다. 예를 들어, (a|b|c)xz는a또는b또는c匹配且后跟xz的문자열

표현식문자열일치하나요?
(a|b|c)xzab xz일치 없음
abxz1个匹配(在处匹配)abxz
axz cabxz2개 일치 항목(())axzbc cabxz

\- 反斜杠

反斜杠\用于转义包括所有元字符在内的各种字符。例如,

\$a如果字符串包含$后跟则匹配a。在此,$RegEx引擎不会以特殊方式对其进行解释。

如果不确定某个字符是否具有特殊含义,可以将其\放在前面。这样可以确保不对字符进行特殊处理。

특수 시퀀스

특수 시퀀스는 일반적인 패턴을 쉽게 작성하는 데 도움이 됩니다. 특수 시퀀스 목록은 다음과 같습니다:

\A -지정된 문자가 문자열의 시작에 있으면 일치합니다.

표현식문자열일치하나요?
\Athethe sun일치
In the sun일치 없음

\b -단어의 시작이나 끝에 있으면 일치합니다.

표현식문자열일치하나요?
\bfoofootball일치
a football일치
afootball일치 없음
foo\bthe foo일치
the afoo test일치
the afootest일치 없음

\B-와 \b. 지정된 문자가아니요단어의 시작이나 끝에 있으면 일치합니다.

표현식문자열일치하나요?
\Bfoofootball일치 없음
a football일치 없음
afootball일치
foo\Bthe foo일치 없음
the afoo test일치 없음
the afootest일치

\d-모든 십진수 문자를 일치시킵니다. [0-9]

표현식문자열일치하나요?
\d12abc33개 일치 항목(())12abc3
파이썬일치 없음

\D-모든 십진수가 아닌 문자를 일치시킵니다. [^0-9]

표현식문자열일치하나요?
\D1ab34"503개 일치 항목(())1ab34"50
1345일치 없음

\s-문자열이 비백스페이스 문자를 포함하는 모든 위치를 일치시킵니다. [ \t\n\r\f\v]에 해당합니다.

표현식문자열일치하나요?
\sPython RegEx1개 일치
PythonRegEx일치 없음

\S-문자열이 비백스페이스 문자를 포함하는 모든 위치를 일치시킵니다. [^ \t\n\r\f\v]에 해당합니다.

표현식문자열일치하나요?
\Sa b2개 일치 항목(()) a b
   일치 없음

\w-모든 문자와 숫자(숫자와 문자)를 일치시킵니다. [a-zA-Z0-9_]。다른 말로, 밑줄 '_'는 문자와 숫자 문자로 간주됩니다.

표현식문자열일치하나요?
\w12&": ;c3개 일치 항목(())12&": ;c
%"> !일치 없음

\W-모든 알파벳과 숫자가 아닌 문자를 일치시킵니다. [^a-zA-Z0-9_]

표현식문자열일치하나요?
\W1a2%c1개 일치(())1a2%c
파이썬일치 없음

\Z -지정된 문자가 문자열의 끝에 있으면 일치합니다.

표현식문자열일치하나요?
\ZPython저는 Python을 좋아합니다1개 일치
저는 Python을 좋아합니다일치 없음
Python은 재미 있습니다.일치 없음

힌트:규칙 표현식을 구축하고 테스트하기 위해 RegEx 테스트 도구를 사용할 수 있습니다. 예를 들어,regex이 도구는 규칙 표현식을 생성하고 배우는 데 도움을 줄 수 있습니다.

지금, 규칙 표현식(RegEx)의 기본 개념을 이해하게 되었습니다. 이제 Python 코드에서 규칙 표현식을 어떻게 사용하는지 논의해 보겠습니다.

Python 정규 표현식

Python에는 re라는 정규 표현식 모듈이 있습니다. 사용하려면 모듈을 가져와야 합니다.

import re

이 모듈은 RegEx와 함께 사용할 수 있는 함수와 상수를 정의합니다.

re.findall()

re.findall() 메서드는 모든 일치하는 항목을 포함한 문자열 목록을 반환합니다.

예제1: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()는 공백 목록을 반환합니다.

re.split()

split 메서드는 일치하는 문자열을 분할하고 분할된 문자열 목록을 반환합니다.

예제2:re.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()의 문법:

re.sub(pattern, replace, string)

이 메서드는 일치하는 항목이 replace 변수의 내용으로 대체된 문자열을 반환합니다.

예제3:re.sub()

# 모든 공백을 제거하는 프로그램
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.subn()는 re.sub()와 유사하게, 그것이 반환하는 것을 기대합니다.2개의 항목을 포함하는 튜플로 반환합니다. 새로운 문자열과 대체 횟수를 포함합니다.

예제4:re.subn()

# 모든 공백을 제거하는 프로그램
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()

re.search() 메서드는 두 개의 매개변수를 취합니다: 패턴과 문자열. 이 메서드는 문자열에서 RegEx 패턴과 일치하는 첫 번째 위치를 찾습니다.

검색이 성공하면 re.search()는 매칭 객체를 반환합니다. 성공하지 않으면 None을 반환합니다.

match = re.search(pattern, str)

예제5:re.search()

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()매칭 객체의 메서드와 속성을 얻는 함수

매칭 객체의 일반적인 메서드와 속성은 다음과 같습니다:

match.group()

group() 메서드는 문자열에서 매칭된 부분을 반환합니다.

예제6:매칭 객체

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)

match.start(),match.end()와 match.span()

start() 함수는 매칭의 서브 문자열의 시작 인덱스를 반환합니다. 마찬가지로, end()은 매칭의 서브 문자열의 끝 인덱스를 반환합니다。

>>> match.start()
2
>>> match.end()
8

span() 함수는 시작과 끝 인덱스를 포함한 매칭 부분의 튜플을 반환합니다。

>>> match.span()
(2, 8)

match.re와 match.string

匹配对象的re属性返回一个正则表达式对象。 同样,string属性返回传递的字符串。

>>> match.re
re.compile('(\\d{3}) (\d{2})')
>>> match.string
'39801 356, 2102 1111'

우리는 re 모듈에서 정의된 모든 일반적인 메서드를 소개했습니다. 더 많은 정보를 원하면 방문해 주세요파이썬 3 re 모듈

RegEx 전에 r 접두사 사용

정규 표현식 전에 사용하면r또는R원시 문자열을 의미합니다. 예를 들어, '\n'은 새 줄이고 r'\n'은 두 문자를 의미합니다: 반사각선\ 뒤에 n.

반사각선\는 모든 메타 문자를 포함한 다양한 문자를 escape합니다. 하지만, 접두사를 사용하면r접두사\는 그를 일반 문자로 간주합니다.

예제7:사용 r 접두사의 원시 문자열

import re
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string) 
print(result)
# 출력: ['\n', '\r']