파이썬 기초 강좌: 11. 정규표현식 예제와 실습 (Python Basics – Regular expressions Examples and Exercises)

파이썬 기초 강좌 – 정규 표현식은 텍스트 검색, 매칭, 파싱에 강력한 도구입니다. 파이썬에서는 re 모듈이 이러한 정규 표현식을 활용할 수 있는 기능을 제공합니다. 이 장에서는 정규 표현식의 기본 개념과 사용법을 다양한 예제와 연습문제를 통해 설명합니다. 정규 표현식은 문자열 패턴을 매칭하는 미니 언어로, 복잡한 텍스트 처리 작업을 효율적으로 수행할 수 있습니다. re.search() 함수와 re.findall() 함수를 사용하여 파일에서 특정 패턴을 찾고 데이터를 추출하는 방법을 배우게 됩니다. 또한, 특수 문자를 사용하여 패턴 매칭의 정확성을 높이는 방법도 다룹니다. 예제와 연습문제를 통해 정규 표현식을 실습하면서 파이썬 코드의 견고성과 간결성을 높이는 방법을 익히세요.

파이썬 기초 강좌 - 정규표현식 예제와 실습

1. 파이썬 기초 강좌 – 패턴 검색

  • 정규 표현식은 문자열 패턴을 매칭하는 미니 언어입니다.
  • re.search() 함수는 문자열 내에서 패턴을 찾는 기본 도구입니다.
  • 초기에는 splitfind 같은 간단한 문자열 메서드를 사용했지만, 정규 표현식은 더 많은 제어와 효율성을 제공합니다.
  • (실습)
import re

with open('mbox-short.txt') as hand:
    for line in hand:
        line = line.rstrip()
        if re.search('From:', line):
            print(line)
  • 프로그램은 파일을 한 줄씩 읽습니다.
  • re.search('From:', line)은 해당 줄에 ‘From:’이라는 문자열이 있는지 확인합니다.
  • 일치하는 줄을 출력합니다.

2. 특수 문자 사용

  • 정규 표현식에서 특수 문자는 패턴 매칭에 더 정확한 제어를 제공합니다.
  • 캐럿(^)은 줄의 시작을 매칭하고, 점(.)은 임의의 한 문자를 매칭합니다.
  • (실습)
import re

with open('mbox-short.txt') as hand:
    for line in hand:
        line = line.rstrip()
        if re.search('^From:', line):
            print(line)
  • 캐럿(^)은 줄이 ‘From:’으로 시작해야 함을 나타냅니다.
  • 이 방법은 단순한 문자열 메서드보다 정확하게 줄을 필터링합니다.

3. 문자 매칭

  • 정규 표현식은 점(.)으로 임의의 문자를
  • 별표(*)로 0회 이상 반복되는 문자를
  • 플러스(+)로 1회 이상 반복되는 문자를 매칭할 수 있습니다.
  • (실습)
import re

with open('mbox-short.txt') as hand:
    for line in hand:
        line = line.rstrip()
        if re.search('^F..m:', line):
            print(line)
  • 표현식 ^F..m:은 ‘F’로 시작하고 임의의 두 문자 다음에 ‘m:’이 오는 줄을 매칭합니다.
  • 이는 패턴 매칭의 유연성을 보여줍니다.

4. 데이터 추출

  • re.findall() 함수는 문자열에서 패턴에 일치하는 모든 하위 문자열을 추출합니다.
  • 이는 이메일 주소와 같은 특정 데이터를 추출할 때 유용합니다.
  • (실습)
import re

s = 'A message from csev@umich.edu to cwen@iupui.edu about meeting @2PM'
lst = re.findall('\S+@\S+', s)
print(lst)
  • \S는 공백이 아닌 문자를 매칭합니다.
  • \S+@\S+은 이메일 주소를 ‘@’ 기호를 중심으로 공백이 아닌 문자로 둘러싸인 형태로 매칭합니다.

5. 검색 및 추출 결합

  • 정규 표현식을 사용하면 검색과 데이터 추출을 결합할 수 있습니다.
  • 표현식에 괄호를 추가하면, 일치하는 문자열 중 일부만 추출할 수 있습니다.
  • (실습)
import re

with open('mbox-short.txt') as hand:
    for line in hand:
        line = line.rstrip()
        x = re.findall('^X\S*: ([0-9.]+)', line)
        if len(x) > 0:
            print(x)
  • ^X\S*: ([0-9.]+)은 ‘X’로 시작하고 공백이 아닌 문자와 콜론이 뒤따른 후 숫자를 포함하는 줄을 매칭하고, 숫자만 추출합니다.
  • 괄호는 [0-9.]+ 주위에 추가되어 숫자와 점 부분만 추출합니다.

연습문제

Exercise 1

  • grep 명령어를 시뮬레이션하는 프로그램을 작성하세요.
  • 사용자가 정규 표현식을 입력하면, 파일에서 일치하는 줄의 수를 세는 프로그램입니다.
  • 실행 샘플
$ python grep.py
Enter a regular expression: ^Author
mbox.txt had 1798 lines that matched ^Author
  • 정답
import re

file_name = input('Enter file: ')
regex = input('Enter a regular expression: ')

count = 0
with open(file_name) as hand:
    for line in hand:
        line = line.rstrip()
        if re.search(regex, line):
            count += 1

print(f'{file_name} had {count} lines that matched {regex}')

Exercise 2

  • New Revision: 39772 형식의 줄에서 숫자를 추출하여 평균을 계산하고 정수로 출력하는 프로그램을 작성하세요.
  • 실행 샘플
Enter file: mbox.txt
38549
  • 정답
import re

file_name = input('Enter file: ')
numbers = []

with open(file_name) as hand:
    for line in hand:
        line = line.rstrip()
        match = re.findall('^New Revision: ([0-9]+)', line)
        if match:
            numbers.append(int(match[0]))

average = sum(numbers) // len(numbers)
print(average)

정규 표현식은 파이썬에서 텍스트 처리 작업을 보다 강력하고 유연하게 수행할 수 있는 도구입니다. 이 장에서 배운 기본 개념과 사용법, 그리고 다양한 예제와 연습문제를 통해, 정규 표현식을 활용하는 방법을 익혔을 것입니다. 이를 통해 복잡한 문자열 매칭과 데이터 추출 작업을 간단하고 효율적으로 해결할 수 있습니다. 앞으로 정규 표현식을 더 깊이 탐구하고, 실습을 통해 경험을 쌓으면서 텍스트 처리 능력을 향상시키길 바랍니다. 정규 표현식을 잘 활용하면 코드를 더욱 간결하고 강력하게 작성할 수 있습니다. 지속적인 연습과 학습을 통해, 텍스트 처리 작업에서 정규 표현식을 활용하는 전문가로 성장해 보세요. 이로써, 데이터 분석, 웹 크롤링, 로그 파일 처리 등 다양한 분야에서 정규 표현식을 유용하게 사용할 수 있을 것입니다.

파이썬 기초 강좌: 10. 튜플 예제와 실습 (Python Basics – Tuple Examples and Exercises)

파이썬 기초 강좌: 12. 네트워크 프로그래밍 예제와 실습 (Python Basics – Networked programs Examples and Exercises)

Leave a Comment