Python에서 정규식 작업하기

AWS, Kubernetes, Python, JavaScript 등에 대한 콘텐츠를 작성합니다. 최신 콘텐츠를 모두 보려면 visit my blog 내 뉴스레터를 구독하십시오. .

This is Day 14 of the #100DaysOfPython challenge



이 게시물은 표준 라이브러리의 regular expressions module을 사용하여 ... .

전제 조건


  • Pipenv . Pipenv에 대한 내 게시물은 here을 참조하십시오.
  • JupyterLab . JupyterLab에 대한 내 게시물은 here을 참조하십시오.
  • Regular Expressions

  • 시작하기


    hello-python-regex 디렉토리를 생성하고 Pillow를 설치해 봅시다.

    # Make the `hello-python-regex` directory
    $ mkdir hello-python-regex
    $ cd hello-python-regex
    # Create a folder to place your icons
    $ mkdir icons
    
    # Init the virtual environment
    $ pipenv --three
    $ pipenv install --dev jupyterlab
    


    이 단계에서 노트북 서버를 시작할 수 있습니다.

    # Startup the notebook server
    $ pipenv run jupyter-lab
    # ... Server is now running on http://localhost:8888/lab
    


    이제 서버가 실행됩니다.

    노트북 만들기



    http://localhost:8888/lab 에 설정되면 시작 관리자에서 새 Python 3 노트북을 생성하도록 선택합니다.

    이 노트북이 hello-python-regex/docs/regex.ipynb 에 저장되어 있는지 확인하십시오.

    노트북의 각 셀에서 다음을 탐색합니다.
  • Regex 모듈을 가져오는 중입니다.
  • Regex 모듈의 기본 사용법입니다.
  • Regex 모듈을 사용한 문자열 교체.

  • 모듈 가져오기



    표준 라이브러리에서 regex module을 가져옵니다.

    import re
    
    m = re.search("Hello, (.+)", "Hello, world!")
    m.group(1)
    # 'world!'
    


    모듈의 기본 사용법



    사용할 수 있는 유용한 모듈 방법이 많이 있습니다.
  • 문자열 검색.
  • 일치하는 문자열.
  • 컴파일 없이 사용.
  • 문자열을 목록으로 분할합니다.
  • 성냥을 교체합니다.

  • 문자열 검색



    Scan through string looking for the first location where this regular expression produces a match, and return a corresponding match object. Return None if no position in the string matches the pattern; note that this is different from finding a zero-length match at some point in the string.



    import re
    
    pattern = re.compile("ello, (.+)")
    m = pattern.search("Hello, world!")
    m.group(1)
    print(m) # <re.Match object; span=(0, 13), match='Hello, world!'>
    print(m.group(1)) # world!
    
    n = pattern.search("Hello, world!", 0)
    print(n) # <re.Match object; span=(0, 13), match='Hello, world!'>
    print(n.group(1)) # world!
    


    일치하는 문자열



    If zero or more characters at the beginning of string match this regular expression, return a corresponding match object. Return None if the string does not match the pattern; note that this is different from a zero-length match.



    pattern = re.compile("ello, (.+)")
    m = pattern.match("Hello, world!")
    # No match as "e" is the 2nd character the "Hello, world!".
    print(m) # None
    
    pattern = re.compile("Hello, (.+)")
    # Does match
    n = pattern.match("Hello, world!")
    print(n) # <re.Match object; span=(0, 13), match='Hello, world!'>
    


    컴파일 없이 사용


    re.matchre.search를 정적 메서드로 사용하는 경우 정규식을 첫 번째 인수로 전달할 수 있습니다.

    m = re.match("Hello, (.+)", "Hello, world!")
    print(m) # <re.Match object; span=(0, 13), match='Hello, world!'>
    
    n = re.match("Hello, (.+)", "Hello, world!")
    print(n) # <re.Match object; span=(0, 13), match='Hello, world!'>
    


    문자열을 목록으로 분할




    m = re.split(",", "Hello, world!")
    
    print(m) # ['Hello', ' world!']
    
    n = re.split("\s", "Hello beautiful world!")
    
    print(n) # ['Hello', 'beautiful', 'world!']
    


    경기 교체


    searchsub 메서드를 사용하여 일치 항목을 바꿀 수 있습니다.

    # Simple example
    target = "Photo credit by [@thomas](https://site.com/@thomas)"
    m = re.search(r"Photo credit by \[@(.+)\]\(https://site.com/@(.+)\)", target)
    res = re.sub(m.group(1), "dennis", target)
    print(res) # Photo credit by [@dennis](https://site.com/@dennis)
    
    # By iterating for multiple matches
    target = "Photo credit by [@thomas](https://site.com/@user)"
    m = re.search(r"Photo credit by \[@(.+)\]\(https://site.com/@(.+)\)", target)
    res = target
    
    for idx, val in enumerate(m.groups()):
            res = re.sub(val, "dennis", res)
    
    print(res) # Photo credit by [@dennis](https://site.com/@dennis)
    


    보다 구체적인 대체를 위해(특히 대량의 텍스트 집합에서) 대체할 문자열을 사용하여 더 명시적일 수 있습니다.

    target = """
    Other words thomas and user we don't want to replace.
    Photo credit by [@thomas](https://site.com/@user)
    """
    new_name = "dennis"
    
    pattern = re.compile(r"Photo credit by \[@(.+)\]\(https://site.com/@(.+)\)")
    res = pattern.sub(f"Photo credit by [@{new_name}](https://site.com/@{new_name})", target)
    # Other words thomas and user we don't want to replace.
    # Photo credit by [@dennis](https://site.com/@dennis)
    


    요약



    오늘의 게시물은 표준 라이브러리의 re 모듈을 사용하여 Python 문자열에서 텍스트를 검색, 일치, 분할 및 대체하는 방법을 보여주었습니다.

    이것은 텍스트 파일로 작업할 때 믿을 수 없을 정도로 유용할 수 있습니다.

    리소스 및 추가 읽을거리


  • The ABCs of Pipenv
  • Hello, JupyterLab
  • Pipenv
  • Regular Expressions in Python
  • Info on Regular Expressions
  • Regex 101 - website for testing Regex expressions

  • 사진 제공: pawel_czerwinski

    원래 내blog에 게시되었습니다. 새 게시물을 지체 없이 보려면 거기에 있는 게시물을 읽고 내 뉴스레터를 구독하십시오.

    좋은 웹페이지 즐겨찾기