산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

Python 정규표현식(re 모듈) 실전 가이드

Python 정규표현식(re 모듈) 실전 가이드

Python re 모듈로 정규표현식 위력 활용법 알아보기. 단계별 예제로 일반 패턴, 매칭 기법, 고급 함수 설명.

정규표현식이란?

정규표현식(RegEx)은 검색 패턴 정의하는 문자 시퀀스. 예: 패턴 ^a...s$는 a로 시작해 s로 끝나는 5글자 문자열 매칭.

^a...s$

패턴으로 문자열 매칭 가능. 다음 표는 패턴이 다른 입력에 어떻게 동작하는지 보여줌:

표현식문자열매칭?
^a...s$abs불일치
alias일치
abyss일치
Alias불일치
An abacus불일치

Python re 모듈이 RegEx 작업 도구 제공. re.match()로 패턴을 문자열에 대조하는 빠른 예:

import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
    print("Search successful.")
else:
    print("Search unsuccessful.")

패턴 발견 시 re.match()가 매치 객체 반환, 아니면 None.


메타문자로 패턴 지정

메타문자는 정규식 엔진이 특별히 해석하는 특수 기호. 가장 흔한 메타문자 빠른 참조:

[] . ^ $ * + ? {} () \ |


대괄호: []

대괄호는 매칭할 문자 집합 정의. 예: [abc]는 a, b, c 중 단일 출현 매칭.

표현식문자열매칭?
[abc]a1 매칭
ac2 매칭
Hey Jude불일치
abc de ca5 매칭

범위는 하이픈으로 표현, 예: [a-e] = [abcde]. 집합 반전은 여는 대괄호 뒤 캐럿 ^, 예: [^abc]는 a, b, c 제외 모든 문자 매칭.


마침표: .

개행 제외 임의 단일 문자 매칭.

표현식문자열매칭?
..a불일치
ac1 매칭
acd1 매칭
acde2 매칭 (4 문자 포함)

캐럿: ^와 달러: $

캐럿은 문자열 시작, 달러는 끝 단언. 예: ^a는 a로 시작하는 모든 문자열, a$는 a로 끝나는 모든 문자열 매칭.

표현식문자열매칭?
^aa1 매칭
abc1 매칭
bac불일치
^ababc1 매칭
acb불일치 (a로 시작하지만 b 안 따름)
표현식문자열매칭?
a$a1 매칭
formula1 매칭
cab불일치

수량자: *, +, ?, {n,m}

이 기호들은 앞 요소 출현 횟수 제어.

예시:

표현식문자열매칭?
ma*nmn1 매칭
man1 매칭
maaan1 매칭
main불일치 (a 뒤 n 아님)
woman1 매칭
표현식문자열매칭?
ma+nmn불일치 (a 없음)
man1 매칭
maaan1 매칭
main불일치 (a 뒤 n 아님)
woman1 매칭
표현식문자열매칭?
ma?nmn1 매칭
man1 매칭
maaan불일치 (a 1개 초과)
main불일치 (a 뒤 n 아님)
woman1 매칭
표현식문자열매칭?
a{2,3}abc dat불일치
abc daat1 매칭 (daat)
aabc daaat2 매칭 (aabc와 daaat)
aabc daaaat2 매칭 (aabc와 daaaat)

자주 쓰이는 패턴: [0-9]{2,4}는 2~4자리 연속 숫자 매칭.

표현식문자열매칭?
[0-9]{2,4}ab123csde1 매칭 (ab123csde)
12 and 3456733 매칭 (12, 3456, 73)
1 and 2불일치

선택: |

수직 막대 논리 OR 구현. 예: a|b는 a 또는 b 포함 문자열 매칭.

표현식문자열매칭?
a|bcde불일치
ade1 매칭 (ade)
acdbea3 매칭 (acdbea)

그룹핑: ()

괄호로 하위 패턴 그룹화 및 매칭 부분 문자열 캡처. 예: (a|b|c)xz는 a, b, c 중 하나 뒤 xz 따르는 문자열 매칭.

표현식문자열매칭?
(a|b|c)xzab xz불일치
abxz1 매칭 (abxz)
axz cabxz2 매칭 (axzbc cabxz)

이스케이프: \

메타문자를 리터럴로 취급하려면 백슬래시 사용. 예: \$a는 $a 리터럴 시퀀스 매칭, $를 문자열 끝 앵커로 해석 안 함.


특수 시퀀스

특수 시퀀스 흔한 패턴 단순화. 예시와 함께 참조 목록:

문자열 시작: \A

표현식문자열매칭?
\Athethe sun일치
In the sun불일치

단어 경계: \b

표현식문자열매칭?
\bfoofootball일치
a football일치
afootball불일치
foo\bthe foo일치
the afoo test일치
the afootest불일치

비단어 경계: \B

표현식문자열매칭?
\Bfoofootball불일치
a football불일치
afootball일치
foo\Bthe foo불일치
the afoo test불일치
the afootest일치

숫자: \d / 비숫자: \D

표현식문자열매칭?
\d12abc33 매칭 (12abc3)
Python불일치
\D1ab34"503 매칭 (1ab34"50)
1345불일치

공백: \s / 비공백: \S

표현식문자열매칭?
\sPython RegEx1 매칭
PythonRegEx불일치
\Sa b2 매칭 ( a b)
불일치

단어 문자: \w / 비단어: \W

표현식문자열매칭?
\w12&": ;c 3 매칭 (12": ;c)
"%> !불일치
\W1a2%c1 매칭 (1a2%c)
Python불일치

문자열 끝: \Z

표현식문자열매칭?
Python\ZI like Python1 매칭
I like Python Programming불일치
Python is fun.불일치

팁: regex101 같은 온라인 정규식 테스터로 패턴 빠르게 작성/디버깅.


Python에서 RegEx 사용

Python re 모듈은 정규식 연산용 풍부한 함수/상수 제공. 임포트:

import re

가장 흔한 유틸리티와 사용법:


re.findall()

문자열에서 겹치지 않는 모든 매칭 리스트 반환.

# 문자열에서 모든 숫자 추출
import re
string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result)  # 출력: ['12', '89', '34']

매칭 없으면 빈 리스트 반환.


re.split()

패턴 매칭 지점마다 문자열 분할해 부분문자열 리스트 반환.

import re
string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result)  # 출력: ['Twelve:', ' Eighty nine:', '.']

선택적 maxsplit 인수로 분할 횟수 제한. 0(기본)은 모든 매칭에서 분할.

import re
string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'
# 첫 번째 발생만 분할
result = re.split(pattern, string, 1)
print(result)  # 출력: ['Twelve:', ' Eighty nine:89 Nine:9.']

re.sub()

패턴 모든 출현을 치환 문자열로 대체.

# 모든 공백 문자 제거
import re
string = 'abc 12\nde 23 \n f45 6'
pattern = '\s+'
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string)  # 출력: abc12de23f456

치환 제한하려면 count 인수 제공. 0이면 모든 매칭 치환.

new_string = re.sub(r'\s+', replace, string, 1)
print(new_string)  # 출력: abc12de 23 f45 6

re.subn()

re.sub() 같지만 새 문자열과 치환 횟수 담은 튜플 반환.

new_string = re.subn(pattern, replace, string)
print(new_string)  # 출력: ('abc12de23f456', 4)

re.search()

패턴 매칭되는 첫 위치 찾기.

string = "Python is fun"
match = re.search('\\APython', string)
if match:
    print("pattern found inside the string")
else:
    print("pattern not found")
# 출력: pattern found inside the string

매치 객체

매칭 발견 시 re.search()가 Match 객체 반환. 주요 메서드/속성:

string = '39801 356, 2102 1111'
pattern = '(\\d{3}) (\\d{2})'
match = re.search(pattern, string)
if match:
    print(match.group())
    print(match.group(1))
    print(match.group(2))
    print(match.groups())
    print(match.start(), match.end(), match.span())
else:
    print("pattern not found")
# 출력:
# 801 35
# 801
# 35
# ('801', '35')
# 2 8 (2, 8)

Raw 문자열 사용 (접두사 r)

문자열 리터럴에 r 접두사 붙이면 백슬래시 리터럴로 취급돼 의도치 않은 이스케이프 시퀀스 방지. 정규식 패턴에 특히 유용.

string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string)
print(result)  # 출력: ['\n', '\r']

re 모듈 더 깊게는 공식 Python 문서 참조.


python

  1. 파이썬 키워드와 식별자: 예약어와 명명 규칙 마스터하기
  2. 파이썬 데이터 타입 마스터하기: 실전 가이드
  3. 파이썬 연산자 마스터하기: 종합 가이드
  4. 파이썬 함수 인자 마스터하기: 위치, 키워드, 기본 매개변수
  5. Python 딕셔너리 마스터하기: 생성, 조작, 고급 기법
  6. Python 이터레이터: 작동 원리와 직접 만들기
  7. Python 클로저 이해하기: 중첩 함수가 변수 캡처하는 방법
  8. Python datetime 마스터하기: 날짜, 시간, 타임존 실전 가이드
  9. Python time 모듈 마스터하기: 함수, 구조체, 실전 예제
  10. Python time.sleep() 완전 정복: 모범 사례, 멀티스레딩, 실전 예제