Python에서 Re 모듈을 사용하는 Regex 와일드카드

Jay Shaw 2023년10월10일
  1. Python에서 와일드카드를 사용하는 정규식 연산에 re.sub() 함수 사용
  2. Python에서 re.sub() 모듈을 사용하여 정규식에서 일치 항목 바꾸기
  3. re.sub() 하위 모듈에서 와일드카드를 사용하는 방법 이해
  4. Python에서 두 개 이상의 Regex 와일드카드를 함께 사용
  5. Python에서 와일드카드를 추가하여 Regex 패턴 및 re.sub() 함수를 사용하여 문자열에 대한 작업 수행
  6. 결론
Python에서 Re 모듈을 사용하는 Regex 와일드카드

와일드카드는 정규식에서 하나 이상의 문자를 나타내거나 교체하기 위한 기호로 사용됩니다. 이들은 주로 검색 기준을 단순화하는 데 사용됩니다.

이 기사에서는 Python에서 와일드카드와 함께 re.sub()를 사용하여 문자열을 정규식과 일치시키는 방법을 자세히 설명합니다.

Python에서 와일드카드를 사용하는 정규식 연산에 re.sub() 함수 사용

Python의 re 모듈은 정규 표현식(RegEx)에 대한 작업에 사용됩니다. 이들은 문자열 또는 문자열 그룹을 찾는 데 사용되는 고유한 문자열입니다.

텍스트를 특정 패턴과 비교하면 해당 패턴이 있는지 없는지 확인할 수 있습니다.

패턴을 하나 이상의 하위 패턴으로 나눌 수도 있습니다. 정규식 지원은 re 모듈을 통해 Python에서 사용할 수 있습니다.

주요 목적은 정규 표현식 내에서 문자열을 검색하는 것입니다.

Python에서 와일드카드와 함께 re.sub()를 사용하는 방법을 이해하기 전에 일반 문자열 문에서 re.sub() 함수의 구현을 알아보겠습니다.

Python에서 re.sub() 모듈을 사용하여 정규식에서 일치 항목 바꾸기

re.sub() 함수는 주어진 텍스트에서 하나 이상의 일치 항목을 문자열로 바꿉니다.

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

문자열에서 패턴의 가장 왼쪽에 있는 겹치지 않는 항목을 대체 repl로 대체하여 생성된 문자열을 반환합니다.

일치하는 항목이 없으면 문자열이 원래 형식으로 반환됩니다. repl이 문자열이면 모든 백슬래시 이스케이프가 처리됩니다. repl도 함수가 될 수 있습니다.

아래 코드 예제를 이해해 봅시다.

import re

rex = "[0-9]+"
string_reg = "ID - 54321, Pay - 586.32"
repl = "NN"

print("Original string")
print(string_reg)

result = re.sub(rex, repl, string_reg)

print("After replacement")
print(result)

코드의 기능:

  1. 코드의 첫 줄은 re 모듈을 가져옵니다.
  2. 검색할 패턴은 rex 변수에 저장됩니다. 한정사 - [0-9]+는 소수 자릿수가 임의의 자릿수로 확장될 수 있는 0-9 범위의 숫자 그룹을 의미합니다.
  3. 하위 작업이 구현될 문자열은 string_reg 변수 안에 저장됩니다.
  4. 패턴을 대체할 문자열은 repl 변수 안에 저장됩니다.
  5. re.sub() 작업은 문자열 변수 string_reg 내에서 rex 패턴을 찾아 repl로 바꿉니다. 반환된 문자열은 result 변수에 저장됩니다.
result = re.sub(rex, repl, string_reg)

출력: 모든 숫자는 'NN'으로 대체되고 모든 알파벳은 그대로 둡니다.

Original string
ID - 54321, Pay - 586.32
After replacement
ID - NN, Pay - NN.NN

re.sub() 하위 모듈에서 와일드카드를 사용하는 방법 이해

이 문서는 주로 네 가지 유형의 와일드카드(.)에 중점을 둡니다. (점), *, ?+. Python에서 와일드카드와 함께 re.sub()를 사용하는 방법을 배우려면 각각의 기능을 배우는 것이 중요합니다.

  1. . (The Dot) - .와 함께 re.sub를 사용합니다. 새 줄을 제외한 모든 문자와 일치하는 Python의 와일드 카드. re 모듈은 아래 프로그램에서 가져오고 세 개의 문자열 인스턴스는 문자열 변수 string_reg에 저장됩니다.

    .와 함께 re.sub() 사용 Python의 와일드카드에서 string_reg 변수는 re.sub() 함수에서 반환된 결과로 덮어씁니다. 점이 새 문자와 일치하면 프로그램은 ad 패턴과 ad 다음에 반복되는 d를 검색합니다.

    출력에서 프로그램이 ad. 패턴을 찾을 때마다 이를 REMOVED로 대체하는 것을 볼 수 있습니다.

    import re
    
    string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx"
    
    string_reg = re.sub(r"ad.", "REMOVED ", string_reg)
    print(string_reg)
    

    출력:

    a23kREMOVED hh234 ... REMOVED 2asdf675 ... xxxREMOVED 2axxx
    
  2. 별표(*) - Python에서 이 와일드카드와 함께 re.sub()를 사용하여 이전 RE에 가능한 한 많은 반복을 제공하고 결과 RE에서 이러한 반복 중 0개 이상을 일치시킵니다.

    예를 들어, ad*는 문자 'a', 'ad' 또는 'a' 뒤에 임의 개수의 d가 오는 문자와 일치합니다.

    여기 출력에서 'a''ad'의 모든 인스턴스가 키워드 'PATCH'로 대체되었음을 볼 수 있습니다.

    import re
    
    string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx"
    
    string_reg = re.sub(r"ad*", "PATCH", string_reg)
    print(string_reg)
    

    출력:

    PATCH23kPATCHhh234 ... PATCH2PATCHsdf675 ... xxxPATCH2PATCHxxx
    
  3. + - Python에서 이 와일드카드와 함께 re.sub()를 사용하여 새 RE에서 이전 RE의 1개 이상의 반복을 일치시킵니다. Ad+'a'와 일치하지 않습니다. 대신 'a' 다음에 0이 아닌 d가 오는 것과 일치합니다.

    이 함수는 'ad....' 패턴을 검색합니다. 여기서 '...'는 이어지는 RE 'd'의 반복되는 숫자를 나타내고 이를 'POP'로 바꿉니다.

    import re
    
    string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx"
    
    string_reg = re.sub(r"ad+", "POP", string_reg)
    print(string_reg)
    

    출력:

    a23kPOPhh234 ... POP2asdf675 ... xxxPOP2axxx
    
  4. ? - 다음 RE가 이전 RE의 0 또는 1 반복과 일치하도록 합니다. 패턴 ad? 'a' 또는 'ad'와 일치합니다.

    프로그램은 'a' 또는 'ad' 인스턴스를 찾아 정규식(REGEX) 'POP'으로 바꿉니다.

    import re
    
    string_reg = "a23kaddhh234 ... add2asdf675 ... xxxadd2axxx"
    
    string_reg = re.sub(r"ad?", "POP", string_reg)
    print(string_reg)
    

    출력:

    POP23kPOPdhh234 ... POPd2POPsdf675 ... xxxPOPd2POPxxx
    

Python에서 두 개 이상의 Regex 와일드카드를 함께 사용

때때로 Python에서 단 하나의 한정 기호만 있는 와일드카드와 함께 re.sub()를 사용하는 것은 원하는 결과를 얻기에 충분하지 않습니다. 수량자를 결합하면 더 복잡한 패턴을 시스템에 전달할 수 있습니다.

그들 중 일부를 이해합시다.

  1. *?, +?, ?? - 이전 예제에서는 ‘.’, ‘+’, ‘*’ 한정사에 대해 배웠습니다. 그들 모두는 탐욕적이며 가능한 한 많은 텍스트와 일치한다는 것을 의미합니다.

    예를 들어 RE<.*><a> b <c>와 일치하는 경우 <a>가 아닌 전체 문자열과 일치하는 경우가 많으며 이는 종종 원하는 동작이 아닙니다.

    ? 문제를 해결하기 위해 마지막에 수량자가 추가됩니다. 한정 기호는 최소한의 또는 탐욕스럽지 않은 방식으로 일치를 수행하도록 지시하여 가장 적은 수의 문자가 일치됨을 의미합니다.

    RE<.*?> 패턴이 사용되는 경우 <a>만 일치합니다.

    import re
    
    string_reg = "as56ad5 ... dhgasd55df ... xxxadd2axxx"
    
    string_reg = re.sub(r"ad*?", "SUGAR", string_reg)
    print(string_reg)
    

    출력: ad*? 수량자는 단지 'a'의 인스턴스를 검색합니다.

    SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
    

    ad+?의 경우: 'ad'만 검색합니다.

    as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
    

    ad??의 경우: 'a' 인스턴스도 검색합니다.

    SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
    
  2. *+, ++, ?+(소유 한정사라고도 함) - '*', '+''?' 수량사와 유사하며 '+'는 가능한 한 자주 일치합니다.

    그 뒤의 표현식이 일치하지 않으면 탐욕적 수량자처럼 역추적을 허용하지 않습니다. 이러한 유형의 한정사를 소유 한정사라고 합니다.

    예를 들어 a*aa*가 4개의 a와 모두 일치하기 때문에 "aaaa"와 일치하지만 마지막 "a"가 나타나면 표현식이 역추적되고 a*만 일치합니다. 네 번째 "a"와 일치하는 최종 "a"와 총 3개의 a.

    그러나 a*+a"aaaa"와 일치하는 데 사용되는 경우 a*+는 4개의 "a"와 모두 일치하지만 역추적할 수 없으며 마지막 과 일치하지 않습니다. "a" 일치하는 문자를 더 이상 찾을 수 없습니다.

    x*+, x++x?+의 등가물은 각각 (?>x*), (?>x+)(?>x?)입니다. 개념을 더 잘 이해하기 위해 프로그램을 살펴보자.

    import regex
    
    string_reg = "as56ad5 ... dhgasd55df ... xxxadd2axxx"
    
    string_reg = regex.sub(r"ad*+", "SUGAR", string_reg)
    print(string_reg)
    

    참고: re 모듈은 소유 수량자를 지원하지 않습니다. 대신 regex() 모듈을 사용하십시오.

    출력: a 또는 'adddd....'의 인스턴스를 찾습니다.

    SUGARs56SUGAR5 ... dhgSUGARsd55df ... xxxSUGAR2SUGARxxx
    

    ad++의 경우: 'ad' 또는 'adddd....'의 인스턴스를 찾습니다.

    as56SUGAR5 ... dhgasd55df ... xxxSUGAR2axxx
    

    ad+?의 경우: ad++와 동일하게 작동합니다.

    as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
    

Python에서 와일드카드를 추가하여 Regex 패턴 및 re.sub() 함수를 사용하여 문자열에 대한 작업 수행

Python에서 와일드카드와 함께 re.sub()를 사용하는 방법을 배웠습니다. 이제 개념을 함께 사용하여 Regex에서 문자열 패턴을 검색하고 문자열 패턴 대신 전체 단어를 바꿉니다.

문제 진술은 우리에게 문자열과 패턴을 제시합니다. 주어진 문자열 내에서 패턴을 검색해야 합니다.

찾으면 re.sub() 함수가 전체 단어를 대체합니다.

예: 처음에 패턴이 발견되면 전체 단어 바꾸기

  1. re 모듈을 가져옵니다.

  2. string_reg 변수를 만들고 문자열 값을 저장합니다. 여기에서 복합 문자열이 저장됩니다. 즉, re.sub() 함수는 문자열 내부의 4개 그룹 모두에 대한 효과를 구현합니다.

    string_reg = """\
        23khadddddh234 > REMOVED23khh234
        add2asdf675 > REMOVED2asdf675"""
    
  3. 함수는 문자열 내에서 패턴을 찾아야 하며, 발견되면 전체 문자열을 대체합니다. 찾을 패턴은 '추가'이므로 원하는 결과를 얻기 위해 한정 기호의 조합이 사용됩니다.

    조합은 'ad', 'add' 또는 'addddd'와 일치하는 방식이어야 합니다. 그러나 add23khh234add2asdf675는 일치하지 않아야 합니다.

    가장 좋은 방법은 add.+?를 사용하는 것입니다.

    string_reg = re.sub(r"add.+? ", "REMOVED ", string_reg)
    

암호:

import re

string_reg = """\
... 23khadddddh234 > REMOVED23khh234
... add2asdf675 > REMOVED2asdf675"""

string_reg = re.sub(r"add.+? ", "REMOVED ", string_reg)
print(string_reg)

출력: 프로그램은 'ad...'를 검색하고 발견되면 repl 'REMOVED'로 바꿉니다. 'ad...'가 처음에 발견되면 전체 단어를 대체합니다.

... 23khREMOVED > REMOVED23khh234
... REMOVED > REMOVED2asdf675

결론

Python에서 와일드카드와 함께 re.sub()를 사용하는 방법에 대한 생생한 설명이 제공됩니다. 기사의 첫 번째 섹션은 간단한 REGEX와 함께 Python 함수 re.sub를 사용하는 데 중점을 둡니다.

그런 다음 re.sub()와 함께 와일드카드를 사용하는 개념에 대해 자세히 설명합니다.

기사를 읽은 후 독자는 Python에서 와일드카드와 함께 re.sub()를 쉽게 사용하고 REGEX에서 문자열 패턴을 검색하는 프로그램을 만들 수 있습니다.

관련 문장 - Python Regex