일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- python
- google sheet
- hydrocylcone
- 정규표현식
- 행 삽입
- 업무자동화
- 엑셀
- CFD
- 모니터링값
- DPM
- pdf annotation
- 유체역학
- 전산유체역학
- 업무
- 업무노가다
- Excel
- 하이드로사이클론
- pressure drop
- 자동화
- 파이썬
- 구글시트
- Meshing
- fluent launcher
- fluent 실행하는 방법
- 셀 배경색
- regex
- mass flow ratio to overflow
- 워드튠
- 후처리 프로그램
- air-core
- Today
- Total
공돌하우스
[정규표현식] Python RegEx 본문
안녕하세요! 빅톨입니다 :)
업무처리를 하거나 코딩을 하다보면 글에서 폰번호와 같은 특정 정보를 반복적으로 추출해야하는 경우가 많이 발생합니다. 오늘은 이런 경우 유용하게 사용할 수 있는 정규표현식에 대해 알아보겠습니다. 본 글은 RegEx Cheat Sheet - Python을 기반으로 작성되었습니다.
정규표헌식이란?
정규표현식은 텍스트에서 특정 정보를 쉽게 찾을 수 있도록 만들어진 문자열 탐색 방법입니다. 정규표현식에서 정해진 규칙에 따락 작성된 패턴문구를 입력하면, 해당 패턴에 매칭되는 정보들을 텍스트에서 추출해줍니다. 따라서 패턴을 한번만 작성하면 반복 노가다에서 벗어날 수 있다는 장점이 있습니다. 또한 Python, JavaScript, PHP, Java 등과 같은 프로그래밍 언어 뿐만 아니라 구글 스프레드시트(구글이 만든 엑셀)에서도 지원하므로 다양한 상황에 적용시킬 수 있습니다. 오늘은 그 중 파이썬에서 정규표현식을 활용하는 방법을 알아보겠습니다.
고객정보가 저장된 log.txt라는 파일이 다음과 같이 작성되어 있고, 저희는 여기서 고객의 휴대폰 번호들을 추출해야하는 상황이라고 가정해보겠습니다.
1. Ema Dough (+1-202-555-0189) - 915 Ridge Street Corpus, TX 78418
2. Tom Hitt (+33-93-751-3845) - 9190 Berkshire Ave. Wayne, NJ 07470
3. Maya Raine (+49-30-833-931-313) - 18 SW. Sage Ave. Ride, CA 95993
휴대폰 번호를 잘 보시면 괄호안에 있고 숫자가 "-"로 이어진 문자열이라는 공통점이 있습니다. 따라서 파이썬 코드를 아래와 같이 작성하면 고객들의 휴대폰 번호를 추출할 수 있습니다.
import re
phone_numbers = []
pattern = r"\(([\d\-+]+)\)"
with open("log.txt", "r") as file:
for line in file:
result = re.search(pattern, line)
phone_numbers.append(result.group(1))
print(phone_numbers)
출력물: ['+1-202-555-0189', '+33-93-751-3845', '+49-30-833-931-313']
위 코드를 설명하자면 다음과 같습니다.
- import re --- 파이썬 정규표현식 라이브러리인 re를 import 합니다.
- phone_numbers = [] --- 추출된 폰번호를 저장할 빈 리스트를 생성합니다.
- pattern = r"\(([\d\-+]+)" --- 폰번호를 추출하기 위한 패턴문구를 저장합니다.
- with open("log.txt", "r") as file: --- 저희가 처리하고자 하는 파일을 불러옵니다.
- for line in file: --- log.txt의 각 줄에 대해 반복적으로 코드를 실행합니다.
- result = re.search(pattern, line) --- 각 줄에서 패턴문구에 해당하는 휴대폰 번호를 탐색합니다.
- phone_numbers.append(result.group(1)) --- 처음에 생성한 리스트에 추출된 폰번호를 저장합니다.
- print(phone_numbers) --- 최종 폰번호 리스트를 출력합니다.
파이썬에서 정규표현식을 사용할때는 대략 위의 과정으로 코드가 작성됩니다. 이때 중요한 것이 바로 3번 패턴문구 작성 과정인데요. 이 패턴문구를 작성하기 위해서는 정규표현식의 기본적인 문법을 공부하고, 자주 사용되는 패턴을 알아두시면 도움이 됩니다. 이에 대해서는 잘 정리된 블로그 글들이 많으므로 참고하시면 될 것 같습니다.
다음으로 알아두셔야 할 것이 6번에서 사용된 search()와 같은 RegEx의 function들 입니다.
findall() --- 매칭되는 모든 요소를 포함한 리스트를 반환
search() --- 매칭되는 요소가 있다면 해당하는 하나의 문자열을 반환
split() --- 매칭되는 요소를 기준으로 분활된 문자열 리스트를 반환
sub() --- 매칭되는 요소를 특정 문자열로 교체
아래는 사용예제입니다.
1. findall()
import re
pattern = r".at"
line = "The big fat cat sat on a cat"
result = re.findall(pattern, line)
print(result)
출력물: ['fat', 'cat', 'sat', 'cat']
2. search()
import re
pattern = r".* .*"
line = "Ada Lovelace"
result = re.search(pattern, line)
print(result)
출력물: <_sre.SRE_Match object; span=(0, 12), match='Ada Lovelace'>
print(result.group())
출력물: Ada Lovelace
print(result.group(0))
출력물: Ada Lovelace
3. split()
import re
pattern = r"cat"
line = "The big fat cat sat on a cat"
result = re.split(pattern, line)
print(result)
출력물: ['The big fat ', ' sat on a ', '']
4. sub()
import re
pattern = r"Ada"
line = "Ada Lovelace"
result = re.sub(pattern, r"Tom", line)
print(result)
출력물: Tom Lovelace
다음으로 7번에서 사용된 group 기능에 대해 알아야합니다. 이 그룹기능은 매칭되는 문자열 중에서 저희가 원하는 문구만 추출할 수 있는 기능입니다. 아래와 같이 사용할 수 있습니다.
1. search()
import re
pattern = r"(.*) (.*)"
line = "Ada Lovelace"
result = re.search(pattern, line)
print(result)
출력물: <_sre.SRE_Match object; span=(0, 12), match='Ada Lovelace'>
print(result.groups())
출력물: ('Ada', 'Lovelace')
print(result.group(0))
출력물: Ada Lovelace
print(result.group(1))
출력물: Ada
print(result.group(2))
출력물: Lovelace
2. split()
import re
pattern = r"(cat)"
line = "The big fat cat sat on a cat"
result = re.split(pattern, line)
print(result)
출력물: ['The big fat ', 'cat', ' sat on a ', 'cat', '']
3. sub()
“\1” 와 “\2”는 각각 첫번째, 두번째 그룹을 의미합니다.
import re
pattern = r"(.*) (.*)"
line = "Ada Lovelace"
result1 = re.sub(pattern, r"\2 \1", line)
result2 = re.sub(pattern, r"Tom", line)
print(result1)
출력물: Lovelace Ada
print(result2)
출력물: Tom
오늘은 파이썬에서 정규표현식을 활용하는 방법에 대해 알아봤습니다. 다음 시간에는 코딩을 모르는 분들도 사용할 수 있는 구글 스프레드시트에서 정규표현식을 사용하는 법을 포스팅하겠습니다.
감사합니다~
'PYTHON' 카테고리의 다른 글
Jupyter notebook(주피터 노트북) 사용법 (0) | 2021.08.22 |
---|---|
[Python3] 파일 확장자명 일괄 변경변경 코드 (0) | 2021.04.20 |
[python문법] is 와 == 의 차이점 (0) | 2021.04.18 |
파이썬 입문 (0) | 2021.04.11 |