파이썬 정규 표현식 튜토리얼

Jinku Hu 2023년12월11일
  1. 파이썬 정규 표현식 re.match()함수
  2. 파이썬 정규 표현식 re.search()함수
  3. re.complie 를 사용하여 정규 표현식 컴파일
  4. 파이썬 정규 표현식 re 모듈의 플래그
  5. 허용되는 문자 확인
  6. 검색 및 교체
  7. findall()함수
  8. finditer()함수
  9. split()함수
  10. re 의 기본 패턴
  11. 반복 사례
  12. 욕심없는 반복
  13. re 의 특수 문자 및 시퀀스
  14. escape기능
  15. group()함수
파이썬 정규 표현식 튜토리얼

이 튜토리얼에서는 파이썬의 re 모듈에 정의 된 정규 표현식과 정규 표현식 연산에 대해 배웁니다. re 는 정규 표현식의 매칭 연산을 지원하는 Python 의 표준 라이브러리입니다.

파이썬에서 정규 표현식은 형식적인 구문을 사용하여 문자열을 다른 패턴과 일치시키는 데 사용되는 문자 또는 시퀀스 집합입니다. 정규 표현식은 파이썬에 포함 된 작은 프로그래밍 언어로 생각할 수 있습니다.

정규식을 사용하여 일부 규칙을 정의 할 수 있으며이 규칙을 사용하여 패턴과 일치시키려는 주어진 문자열에서 가능한 문자열을 작성합니다. 파이썬의 정규 표현식은 일련의 명령어로 해석됩니다.

파이썬 정규 표현식 re.match()함수

일치 기능을 사용하여 RE 패턴을 주어진 문자열과 일치시킬 수 있습니다. match 함수는 플래그를 포함합니다. 플래그는 정규식의 동작을 정의하며이 자습서의 뒷부분에서 볼 수있는 다른 값을 포함 할 수 있습니다.

다음은 Python 에서 match 함수의 구문입니다.

re.match(pattern, string, flags)

세 가지 주장이 있습니다.

  1. pattern 은 매칭되는 정규식 패턴입니다.
  2. string은 정규식과 일치하는 주어진 문자열입니다.
  3. flags 는 정규 표현식의 동작을 변경하는 데 사용되며 선택 사항입니다.

일치가 성공적으로 수행되면 match 객체가 반환되고 그렇지 않으면 None 이 반환됩니다. match 객체에는 group (num) 및 group() 함수라는 두 가지 주요 메소드가 있습니다. 이 함수를 사용하는 주요 목적은 각각 일치 또는 특정 하위 시퀀스와 모든 하위 시퀀스를 반환하는 것입니다.

‘재 일치’기능 사용

다음 예는 match 기능을 사용하는 방법을 보여줍니다.

import re

strTest = "Hello Python Programming"
mobj = re.match(r"hello", strTest, re.I)
print(mobj.group())

이 코드에서는 먼저 모든 re모듈을 가져옵니다. 그런 다음 문자열 strTest 를 RE 패턴과 비교하고 match 함수에서 반환 된 값은 mobj 에 할당됩니다. match 함수는 re 를 사용하여 호출 된 다음 괄호 안에 첫 번째 인수는 일치시킬 패턴이며 패턴이 일치하는 지정된 문자열을 가지며 플래그 값도 전달됩니다. 여기서 ’re.I’는 IGNORECASE 를 의미하는 플래그 값이므로 패턴과 문자열의 대소 문자가 다른지 여부는 무시됩니다 (대문자 또는 소문자).

출력은 다음과 같습니다

Hello

이 예에서는 문자열이 원시 문자열임을 알려주는 접두사 r 이 사용됩니다. 원시 문자열에서는 이스케이프 시퀀스를 사용할 때 이중 슬래시를 쓸 필요가 없습니다. 예를 들어 백 슬래시를 원한다면 일반 문자열에서와 같이 단일\이지만 이중 백 슬래시\\는 없습니다. 이것은 일반 문자열과 원시 문자열의 유일한 차이점입니다.

정규 문자열과 함께 re.match 함수 사용

원시 문자열 대신 일반 문자열이 사용되는 아래 예를 고려하십시오.

import re

str = "\\tHello Python Programming"
mobj = re.match("\\thello", str, re.I)  # no match

str = "\tHello Python Programming"
mobj = re.match("\\thello", str, re.I)  # \thello is matching

파이썬 정규 표현식 re.search()함수

re.search()함수를 사용하여 주어진 문자열에서 RE 패턴을 검색 할 수 있습니다. search 함수에는 stringflags (선택 사항)가 지정된 pattern 함수에 세 개의 인수가 있습니다.

다음은 Python 에서 검색 함수의 구문입니다.

re.search(pattern, string, flags)

다음 파이썬 코드는 search()함수의 사용법을 보여줍니다 :

import re

str = "Hello Python Programming"
sobj = re.search(r"programming", str, re.I)
print(sobj.group())
Programming

이 코드에서 ‘프로그래밍’이라는 단어를 검색하는 중입니다. search 함수는 전체 문자열을 검색합니다. 검색과 일치의 차이점은 ‘일치’기능은 문자열의 시작 부분에서만 검사하는 반면 ‘검색’은 전체 문자열에서 검색한다는 것입니다.

re.search 를 사용하여 처음부터 검색

문자열의 시작 부분에서 검색하려면^를 사용할 수 있습니다. 다음 예제를 고려하십시오.

import re

str = "Hello Python Programming"
sobj = re.search(r"^programming", str, re.I)
print(sobj.group())  # no match is found

sobj = re.search(r"^hello", str, re.I)
print(sobj.group())  # matching: Hello

^는 문자열의 시작 부분에서만 검색합니다.

’re.search’를 사용하여 마지막에서 검색

주어진 문자열의 끝에서 검색 할 수도 있습니다. 패턴의 끝에서$를 사용하여 수행 할 수 있습니다. 아래 코드를 고려하십시오.

import re

str = "Hello Python Programming"
sobj = re.search(r"programming$", str, re.I)
print(sobj.group())  # matching: Programming

sobj = re.search(r"hello$", str, re.I)
print(sobj.group())  # no match found

re.complie 를 사용하여 정규 표현식 컴파일

컴파일시 파이썬의 정규 표현식은 패턴으로 변환됩니다. 이러한 패턴은 실제로 검색, 일치 및 교체 등을 포함 할 수있는 다른 작업을 수행하기 위해 다른 기능을 포함하는 패턴 객체입니다.

패턴을 컴파일 할 때 나중에 프로그램에서 해당 패턴을 사용할 수 있습니다.

사전 컴파일 된 패턴 사용

패턴 r"\d"가 컴파일 된 문자열의 첫 번째 숫자를 의미하고이 패턴을 사용하여 검색 기능을 호출하고 검색 기능에 문자열을 전달했습니다. 이 패턴은 검색 기능에 제공된 문자열에서 검색됩니다. 마찬가지로이 사전 컴파일 된 패턴을 다음과 같이 일치 함수와 함께 사용할 수 있습니다.

import re

compPat = re.compile(r"(\d)")
sobj = compPat.search("Lalalala 123")
print(mobj.group())

mobj = compPat.match("234Lalalala 123456789")
print(mobj.group())
1
2

파이썬 정규 표현식 re 모듈의 플래그

플래그를 사용하여 정규 표현식의 동작을 변경할 수 있습니다. 함수에서 플래그는 선택 사항입니다. flags 키워드를 사용하고 플래그 값을 지정하거나 플래그 값을 직접 작성하여 두 가지 방식으로 플래그를 사용할 수 있습니다. RE 리터럴에 둘 이상의 플래그 값을 가질 수 있습니다. 비트 OR 연산자|를 사용하면됩니다.

일반적으로 사용되는 플래그 중 일부가 정규식 리터럴로 설명되어있는 다음 표를 고려하십시오.

깃발 가치 기술
re.I 이 수정자는 일치하는 동안 문자열과 패턴의 경우를 무시합니다.
re.L 이 수정자는 현재 로케일과 관련된 단어를 해석하는 데 사용됩니다.
re.M 이 수정자는$를 문자열의 끝이 아닌 행의 끝과 일치시키기 위해 사용됩니다. 마찬가지로^는 문자열의 시작이 아니라 행의 시작에서 일치합니다.
re.S 이 수정자는 어떤 문자와도 일치하도록 도트.를 만드는 데 사용됩니다. 이것은 또한 개행을 포함합니다.
re.U 이 수정자는 문자를 유니 코드 문자 세트로 해석하는 데 사용됩니다.
re.X 공백을 무시하는 데 사용됩니다. #를 주석의 표시 자로 만듭니다.

여러 플래그 값 사용

RE 의 동작을 변경하기 위해 여러 플래그 값을 사용하는 방법을 볼 수있는 다음 Python 코드를 고려하십시오. 비트 OR(|)연산자로 여러 플래그 값을 포함 할 수 있습니다.

import re

s = re.search("L", "Hello")
print(s)  # Output: None, L is there but in small letter and we didn't use flags

s = re.search("L", "Hello", re.I)
print(s)  # Output: 1

s = re.search("L", "^Hello", re.I | re.M)
print(s)  # Output: 1, searching will be made from the start of line and case is ignored

허용되는 문자 확인

특정 문자열에 특정 범위의 문자가 포함되어 있는지 여부를 확인할 수도 있습니다.

함수 정의 및 허용되는 문자 확인

함수가 정의되고 사전 컴파일 된 패턴을 사용하여 특정 문자가 전달 된 문자열에 있는지 여부를 확인하는 다음 예를 고려하십시오.

import re


def check(str):
    s = re.compile(r"[^A-Z]")
    str = s.search(str)
    return not bool(str)


print(check("HELLOPYTHON"))  # Output: True
print(check("hellopython"))  # Output: False

이 함수에서 r'[^A-Z]'인 패턴이 컴파일되어 check 라는 함수가 호출 될 때 전달 된 문자열을 검색하는 데 사용됩니다. 이 함수는 전달 된 문자열에 ‘A-Z’(대문자) 문자가 포함되어 있는지 확인합니다. 마찬가지로 소문자로 문자열을 전달하면 false 가 반환되는 것을 알 수 있습니다.

검색 및 교체

re 모듈은 함수의 repl 속성을 사용하여 주어진 string 에서 pattern 의 모든 발생을 대체하는 데 사용되는 sub 함수 인 함수를 제공합니다. 문자 수에 도달 할 때까지 문자가 바뀝니다. sub 함수는 업데이트 된 문자열을 반환합니다.

다음은 하위 함수의 구문입니다.

re.sub(pattern, repl, string, count=0)

‘서브’기능 사용

sub 함수가 전체 문자열을 주어진 문자열로 대체하는 아래 예제를 고려하십시오.

import re

s = "Playing 4 hours a day"
obj = re.sub(r"^.*$", "Working", s)
print(obj)
Working

여기에는 sub 기능이 사용됩니다. r'^.*$패턴은 문자열의 시작에서 시작하는 것을 의미하고. *는 문자열의$끝까지 문자열에있는 모든 것을 의미합니다. 그런 다음 인수 "Working" 은 전체 문자열 s 를 대체합니다.

sub 함수를 사용하여 문자열에서 모든 숫자를 삭제

sub 함수가 주어진 문자열에서 숫자를 삭제하는 다음 예제를 고려하십시오. 이를 위해\d 를 사용할 수 있습니다 :

import re

s = "768 Working 2343 789 five 234 656 hours 324 4646 a 345 day"
obj = re.sub(r"\d", "", s)
print(obj)
Working   five   hours   a  day

마찬가지로 문자열에서 문자를 삭제할 수 있습니다. 이를 위해\ D 를 사용할 수 있습니다.

import re

s = "768 Working 2343 789 five 234 656 hours 324 4646 a 345 day"
obj = re.sub(r"\D", "", s)
print(obj)
76823437892346563244646345

findall()함수

findall 함수는 패턴과 일치하는 모든 문자열의 목록을 반환합니다. searchfindall 함수의 차이점은 findall 은 모든 일치 항목을 찾고 search는 첫 번째 일치 항목 만 찾습니다. 이 함수는 겹치지 않는 일치 항목을 찾아 문자열 목록으로 반환합니다.

다음은 findall 함수의 구문입니다.

findall(pattern, string, flags)

여기서 pattern 은 RE 패턴으로,string 값과 함께 주어진 string 에서 찾을 수 있습니다. 예를 들어 re.I 는 대소 문자를 무시합니다.

겹치지 않는 모든 일치 항목 찾기

다음 예에서 findall 은 겹치지 않는 일치 항목을 찾습니다.

import re

str = "Working 6 hours a day. Studying 4 hours a day."
mobj = re.findall(r"[0-9]", str)
print(mobj)
["6", "4"]

r '[0-9]'는 주어진 문자열에서 모든 숫자를 찾는 패턴이며 mobj 에 저장된 문자열 목록 (숫자에 상관없이)이 반환됩니다.

파일이있는 findall

findall 을 사용하여 파일에서 찾을 수도 있습니다. 파일과 함께 findall을 사용하면 파일에서 일치하는 모든 문자열의 목록이 반환됩니다. file 의 read() 함수가 사용되므로 파일의 전체 텍스트를 문자열로 반환하므로 루프를 사용하여 파일의 각 줄을 반복 할 필요가 없습니다. 다음 예제를 고려하십시오.

import re

file = open("asd.txt", "r")
mobj = re.findall(r"arg.", file.read())
print(mobj)
file.close()
["arg,", "arg,", "arg,", "argv", "argv", "argv"]

이 예에서 파일은 읽기 모드에서 먼저 열립니다. 패턴 ‘r’arg.‘는 파일의 내용과 일치하며 출력에 일치하는 문자열 목록이 있습니다.

finditer()함수

finditer 함수는 문자열의 인덱스 인 일치하는 문자열의 위치와 함께 문자열에서 RE 패턴을 찾는 데 사용할 수 있습니다. 이 함수는 실제로 일치하는 문자열을 반복하고 문자열의 인덱스 또는 위치를 반환합니다.

다음은 finditer 함수의 구문입니다.

finditer(pattern, string, flags)

경기 반복

findallfinditer 의 유일한 차이점은 finditer 는 일치하는 문자열과 함께 색인을 리턴한다는 것입니다. 아래 코드에서 finditer 는 for 루프를 사용하여 일치하는 문자열을 반복하면서 일치하는 문자열의 위치를 ​​찾는 데 사용됩니다.

import re

str = "Working 6 hours a day. Studying 4 hours a day."
pat = r"[0-9]"
for mobj in re.finditer(pat, str):
    s = mobj.start()
    e = mobj.end()
    g = mobj.group()
    print("{} found at location [{},{}]".format(g, s, e))
6 found at location [8,9]
4 found at location [32,33]

이 예제에서 패턴은 str 에있는 0에서 9까지의 숫자입니다. for 루프는 finditer 에 의해 반환 된 일치하는 문자열을 반복합니다. 루프에서 함수 start,endgroup 은 시작 색인, 종료 색인 및 finditer 에 의해 리턴 된 문자열의 각 반복에서 각각 일치하는 항목을 리턴합니다.

split()함수

split 함수는 문자열을 분할하는 데 사용됩니다.

다음은 split 함수의 구문입니다.

split(patter, string, maxsplit, flags)

여기서 max 는 총 문자열 스플릿 수입니다. 최대 maxsplit분할이 발생하면 나머지 문자열이 목록의 마지막 요소로 반환됩니다. max 의 기본값은 0이며 이는 무제한 분할을 의미합니다.

문자열 나누기

split 함수는 문자열의 각 단어를 반환

아래 코드에서 문자열은 주어진 패턴과 최대 분할 수에 따라 분할됩니다.

import re

str = "Birds fly high in the sky for ever"
mobj = re.split("\s+", str, 5)
print(mobj)
["Birds", "fly", "high", "in", "the", "sky for ever"]

이 예에서 패턴 문자\ s 는 공백 문자와 일치하는 특수 문자로[ \t\n\r\f]와 같습니다. 따라서 단어를 분리 할 수 ​​있습니다. max 의 값은 5 이며 여기에서 6 을 분할하고 마지막 요소는 5 번째 분할 후 문자열의 나머지 부분입니다.

re 의 기본 패턴

정규식은 주어진 문자열과 비교되는 패턴을 지정할 수 있습니다. 다음은 정규 표현식의 기본 패턴입니다.

무늬 기술
^ 문자열의 시작 부분에서 일치하는 데 사용됩니다.
$ 이 패턴은 문자열의 끝에서 일치합니다.
. 점은 한 문자를 일치시키는 데 사용됩니다 (줄 바꿈은 포함되지 않음).
[...] 대괄호 안에 단일 문자를 일치시키는 데 사용됩니다.
[^ ...] 이것은 단일 문자와 일치하지만 대괄호는 아닙니다.
* 주어진 문자열에서 0 이상의 선행 re 발생.
+ 주어진 문자열에서 1 회 이상의 선행 re 발생.
? 주어진 문자열에서 0 또는 1의 선행 re 가 발생합니다.
{n} 주어진 문자열에서 n 개의 발생 횟수와 일치합니다.
{n,} n 개 또는 n 개 이상의 발생 횟수와 일치합니다.
{n, m} 이 패턴은 문자열에서 최소 n 개와 최대 m 개를 일치시키는 데 사용됩니다.
`a b`
(재) 이 패턴은 정규식을 그룹화하는 데 사용되며 일치하는 텍스트를 기억합니다.
(?imx) RE 에서 i 또는 m 또는 x 를 일시적으로 토글합니다. 괄호를 사용하는 경우 괄호 영역 만 영향을받습니다.
(?-imx) RE 에서 i 또는 m 또는 x 를 일시적으로 끕니다. 괄호를 사용하는 경우 괄호 영역 만 영향을받습니다.
(?: re) 이 패턴은 정규식을 그룹화하는 데 사용되지만 일치하는 텍스트는 기억하지 않습니다.
(?imx : re) 괄호 안의 RE 에서 i 또는 m 또는 x 를 일시적으로 토글합니다.
(?-imx : re) 괄호 안의 RE 에서 i 또는 m 또는 x 를 일시적으로 해제합니다.
(?#...) 코멘트입니다.
(?=re) 패턴을 사용하여 위치를 지정하는 데 사용됩니다. 범위가 없습니다.
(?!re) 패턴 부정을 사용하여 위치를 지정하는 데 사용됩니다. 범위가 없습니다.
(?>re) 이 패턴은 독립 패턴과 일치시키는 데 사용됩니다.
\w 이 패턴은 단어를 일치시키는 데 사용됩니다.
\W 이 패턴은 비 단어를 일치시키는 데 사용됩니다.
\s 공백과 일치합니다. \s[ \t\n\r\f]와 같습니다.
\S 공백이 아닌 문자와 일치합니다.
\d [0-9]와 같습니다. 문자열의 숫자와 일치합니다.
\D 숫자가 아닌 문자와 일치합니다.
\A 문자열의 시작과 일치합니다.
\Z 문자열의 끝과 일치합니다. 그리고 개행이 있으면 개행 전에 일치합니다.
\G 마지막 경기가 완료된 지점과 일치합니다.
\b 대괄호 밖에 있으면 단어 경계와 일치하지만 대괄호 안에 있으면 백 스페이스와 일치합니다.
\B 단어가 아닌 경계와 일치합니다.
\n, \t, etc. \n 은 개행과 일치하는 데 사용되고\t 는 탭과 일치합니다.
\1 ... \ 9 이 패턴은 n 번째 하위 표현식 (그룹화)과 일치합니다.
\10 \ 10 일치하는 경우 이미 n 번째 하위 표현식 (그룹화)과 일치합니다. 일치하지 않으면 \ 10은 문자 코드의 8 진 표현을 제공합니다.

반복 사례

다음 표는 반복 사례의 예를 설명과 함께 보여줍니다.

설명
ab? a 또는 ab 와 일치합니다.
ab * ab *는 ab 와 a 및 a 와 일치하고 b 와 일치합니다.
ab + ab +는 a 뿐만 아니라 a 와 b 를 의미합니다. a 뒤에 0이 아니어야합니다. b.
\ d {2} 정확히 2 자리와 일치합니다.
\ d {2,} 2 자리 이상의 숫자와 일치합니다.
\ d {2,4} 숫자 2, 3 및 4와 일치합니다.

욕심없는 반복

정규 표현식에서 반복은 기본적으로 욕심이며 가능한 많은 반복을 일치시킵니다.

*,+?와 같은 한정자는 탐욕스러운 한정자입니다. .*를 사용하면 욕심이 일치하고 전체 문자열이 일치하여 가능한 한 많은 문자가 일치합니다. 아래 코드를 고려하십시오.

import re

mobj = re.match(r".*", "Birds fly high in sky")
print(mobj.group())
Birds fly high in the sky

여기에서 전체 문자열이 일치하는 것을 볼 수 있습니다.

. +와 함께?를 추가하면 탐욕스럽지 않은 re가 생기고. +?패턴은 문자열에서 가능한 한 적은 문자와 일치합니다.

import re

mobj = re.match(r".*", "Birds fly high in sky")
print(mobj.group())

결과는 문자열의 첫 문자입니다

B

re 의 특수 문자 및 시퀀스

re 의 특수 문자는\로 시작합니다. 예를 들어, 문자열의 시작 부분과 일치하는\ A 가 있습니다.

이러한 특수 문자는 위 표에 설명되어 있습니다.

이 섹션에서는 일부 특수 문자의 예를 보여줍니다.

import re

str = "Birds fly high in the sky"
# \A
# OUTPUT: B, here \A will match at beginning only.
mobj = re.match(r"\Ab", str, re.I)

# \d
mobj = re.match(r"\d", "4 birds are flying")  # OUTPUT: 4

# \s
mobj = re.split("\s+", "birds fly high in the sky", 1)  # OUTPUT: ['Birds', 'fly']

escape기능

escape함수는 문자열에서 모든 문자를 이스케이프하는 데 사용됩니다. ASCII 문자, 숫자 및_는 이스케이프되지 않습니다. 이스케이프함수는 문자열에서 메타 문자를 추출 할 때 사용됩니다.

다음은 이스케이프 함수의 구문입니다.

escape(pattern)

다음 예에서 문자열 www.python.org은 이스케이프 함수로 전달됩니다. 여기에는 메타 문자 인.가 있으며 추출되거나 일치합니다.

print(re.escape("www.python.org"))
www\.python\.org

.는 추출되거나 일치하는 메타 문자입니다. 이스케이프 기능을 사용하여 메타 문자를 일치시킬 때마다 문자 앞에\가 있습니다.

특수 문자 이스케이프

괄호[]와 같은 문자는 일치시킬 수 없습니다. 다음 예제를 고려하십시오.

import re

mobj = re.search(r"[a]", "[a]b")
print(mobj.group())
a

여기서 대괄호[]가 일치하지 않는 것을 볼 수 있습니다.

이스케이프 기능을 사용하여 일치시킬 수 있습니다.

import re

mobj = re.search(r"\[a\]", "[a]b")
print(mobj.group())
[a]b

group()함수

group 함수는 발견 된 일치의 하나 이상의 서브 그룹을 리턴하는 데 사용됩니다. group 함수는 몇 가지 인수를 가질 수 있습니다.

그룹 함수의 구문은 다음과 같습니다.

group(group1, group2, ..., groupN)

그룹 함수에 단일 인수가있는 경우 결과는 단일 문자열이지만 둘 이상의 인수가 있으면 결과는 튜플 (인수 당 하나의 항목 포함)이됩니다.

인수가 없으면 기본적으로 인수는 0이며 전체 일치를 반환합니다.

인수 groupN 이 0이면 반환 값은 전체적으로 일치하는 문자열이됩니다.

그룹 번호 또는 인수를 음수 값 또는 패턴의 그룹 수보다 큰 값으로 지정하면 IndexError예외가 발생합니다.

group(0)에 해당하는 group 함수에 인수가없는 아래 코드를 고려하십시오.

import re

str = "Working 6 hours a day"
mobj = re.match(r"^.*", str)
print(mobj.group())
Working 6 hours a day

여기에 group()이 사용되고 전체 일치하는 문자열이 있습니다.

일치하는 텍스트 부분 선택

다음 예에서 group 함수는 인수와 함께 사용하여 일치하는 그룹을 선택합니다.

import re

a = re.compile("(p(q)r)s")
b = a.match("pqrs")
print(b.group(0))
print(b.group(1))
print(b.group(2))
pqrs
pqr
q

여기서 group(0)은 전체 일치를 반환합니다. group(1)pqr 인 첫 번째 일치를 반환하고 group(2)q 인 두 번째 일치를 반환합니다.

명명 된 그룹

명명 된 그룹을 사용하여 캡처 그룹을 만들 수 있습니다. 이 그룹은 이름으로 참조 될 수 있습니다. 아래 예를 고려하십시오.

import re

mobj = re.search(r"Hi (?P<name>\w+)", "Hi Roger")
print(mobj.group("name"))
Roger

비 캡처 그룹

캡처하지 않은 그룹은? :를 사용하여 만들 수 있습니다. 비 캡처 그룹은 그룹의 내용을 원하지 않을 때 사용됩니다.

import re

mobj = re.match("(?:[pqr])+", "pqr")
print(mobj.groups())
()
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook