Python에서 정규식 작업하기
This is Day 14 of the #100DaysOfPython challenge
이 게시물은 표준 라이브러리의 regular expressions module을 사용하여 ... .
전제 조건
시작하기
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 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.match
및 re.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!']
경기 교체
search
및 sub
메서드를 사용하여 일치 항목을 바꿀 수 있습니다.# 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 문자열에서 텍스트를 검색, 일치, 분할 및 대체하는 방법을 보여주었습니다.이것은 텍스트 파일로 작업할 때 믿을 수 없을 정도로 유용할 수 있습니다.
리소스 및 추가 읽을거리
사진 제공:
pawel_czerwinski
원래 내blog에 게시되었습니다. 새 게시물을 지체 없이 보려면 거기에 있는 게시물을 읽고 내 뉴스레터를 구독하십시오.
Reference
이 문제에 관하여(Python에서 정규식 작업하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/okeeffed/working-with-regex-expressions-in-python-48m0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)