728x90

Python 에서 정규표현식을 사용하여 문자열을 추출하는 법 예제 코드이다.

 

greedy 수량자와 non-greedy 수량자의 차이점을 확인할 수 있다.

import re
 
reg = re.search(r'a[bcd]*b''abcdccb')
print(reg)
 
reg = re.search(r'a[bcd]*?b''abcdccb')
print(reg)
 
reg = re.search(r'a[bcd]*?b''abbcdccb')
print(reg)
 
reg = re.search(r'a[bcd]*?c''abbcdccb')
print(reg)
 
reg = re.search(r'a[bcd]*c''abbcdccb')
print(reg)
 
reg = re.search(r'a[bcd]+?b''abcdccb')
print(reg)
 
reg = re.search(r'a[bcd]+?b''abbcdccb')
print(reg)
 

 

 

\w matches any word character ( alphanumeric plus "_" ).

import re
 
samples = [
    '서울시 강남구 대치동 123번지',
    '서울시 강동구 상일동 123번지 201동 501호',
    '서울시 강동구 천호4동 123번지 103동 208호',
    '서울시 강동구 길동 0412번지 0008호 마루빌딩 6층',
    '서울시 강동구 길동 412번지 8호 마루빌딩 6층 제103동, 제104동 새올',
]
# 다른 언어에서는 한글은 word 로 인식 하지 않기 때문에 \b 로 구분할 수 없다.
for i in samples:
    # findall : 문자열의 전체를 검색 (결과 : 문자열 리스트)
    print(re.findall("(?:.+[도시]\s)(?:.+[시구]\s)(.+동)\s",i)[0])
    print(re.findall("(?:.+[도시]\s)(?:.+[시구]\s)(.+?동)\s",i)[0])
    # ?: : 그룹핑 대상에서 제외하라.
    # [도시] : 도 or 시
    # \s : 공백
    # .+ : 임의의 문자(.)를 + (1개 이상 반복) 동 글자를 만나는 문장 끝까지
    # .+? : 임의의 문자(.)를 +?(1개 이상 반복) 동 글자를 만나는 문장 첫글자까지
 
print('-'*10)
 
# Python 과 .NET(C#) 에서는 한글, 영문, 숫자, 언더바(_)를 word 로 인식하는 것 같다.
for i in samples:
    print(re.findall("(\w+?동)\s",i)[0])
 

 

 

https://regex101.com/ 에서 검증을 해보시라.

 

블로그 이미지

Link2Me

,