Python Regular Expression(Regex) - 파이썬 정규표현식

Yves (Taeyeon Kim)·2021년 11월 17일
0
post-thumbnail

1. Search()

import re

wordlist = ["color", "colour", "work", "working",
            "fox", "worker", "working"]

re.search(찾고자 하는 단어, 찾을 곳)

for word in wordlist:
    if re.search('col.r', word): # .은 하나의 '아무 문자'를 의미함
        print(word)

# color
for word in wordlist:
    if re.search('col..r', word):
        print(word)
        
# colour
for word in wordlist:
    if re.search('col.*r', word): #* 은 바로 앞의 문자의 반복을 의미
        print(word)
        
#color
#colour

re.search 함수는 반드시 문자열의 처음부터 일치해야 하는 것은 아니다.
wordlist2 = ['acolor', 'color', 'colour']

for word in wordlist2:
    if re.search('col.r', word): 
        print(word)

2. match()

regular_expressions = '<html><head><title>Title</title>'

print(len(regular_expressions))

# 32

2.1. match.span()

print(re.match('<.*>', regular_expressions).span())
# span(): 정규표현식과 일치하는 문자열의 (시작위치, 끝 위치+1) 튜플을 반환한다.

# (0, 32)

2.2. match.group()

print(re.match('<.*>', regular_expressions).group())
# group(): 정규표현식과 일치된 문자열을 반환한다.

# <html><head><title>Title</title>

3. Compile()

compile은 문자열에 적용하고자 하는 패턴을 정의하는 것이다.

3.1. compile 객체화 방식

phone = re.compile(r"010-\d{4}-\d{4}")
# 010-숫자4개-숫자4개 형식으로 컴파일
# 아래와 같은 데이터가 있을 때
personal_info = ['홍길동 010-1234-1234', '고길동 010-5678-5679']

# search 메서드를 활용해 컴파일된 패턴이 적용되는 부분만 찾고
for text in personal_info:
    match_object = phone.search(text)
    
    print(match_object.group())
    # group() 메서드로 해당 문자열을 반환
    
##휴대폰 번호만 추출된 것을 확인할 수 있다.    
# 010-1234-1234
# 010-5678-5679

3.2. 축약 compile 방식

컴파일을 축약된 형태로도 사용할 수 있다.

# re.match(compile 패턴, 찾을 곳)
phone_match = re.match("010-\d{4}-\d{4}", "고길동 010-1234-1234")
print(phone_match)

# <re.Match object; span=(0, 13), match='010-1234-1234'>
phone_search = re.search("010-\d{4}-\d{4}", '홍길동 010-1234-1234')
print(phone_search)

# <re.Match object; span=(4, 17), match='010-1234-1234'>

하지만 컴파일 패턴 객체를 여러번 사용해야 할 때는 3.1. compile 객체화 방식인 re.compile 방식으로 사용하는 것이 편하다.





last modified 17-11-2021.

0개의 댓글