본문 바로가기

IT 차곡차곡/Python

[Python] 정규표현식2 - 문자열 매치 [ ]

문자 클래스 [ ]

문자 클래스로 만들진 정규식은 "[ ] 사이의 문자들과 매치" 라는 의미를 갖는다.

 

[ ] 안에는 어떤 문자도 들어갈 수 있다.

 

[abc] : a, b, c중 한 개의 문자와 매치

 

예제1

import re

pat = re.compile('[abc]')

# match : 문자열의 처음부터 일치하는지 확인
print(pat.match('a')) # 일치
print(pat.match('before')) # 일치
print(pat.match('dude')) # 불일치

 

결과

<re.Match object; span=(0, 1), match='a'>
<re.Match object; span=(0, 1), match='b'>
None

예제2

# ['file1', 'file3', 'file5', 'file7' ]
pat2 = re.compile('file[1357]')
print(pat2.match('file1')) # 일치
print(pat2.match('file2')) # 불일치
print(pat2.match('file3')) # 일치
print(pat2.match('filea')) # 불일치

# match는 처음부터 일치하는지 확인한다.
print(pat2.match('file1 filea')) # 0~5번 인덱스에서 문자열이 발견됐다
# serach는 문자열 전체에서 일부 일치하는지 확인한다.
print(pat2.search('file2 file3')) # 6 ~ 11번 인덱스에서 문자열이 발견됐다

 

결과

<re.Match object; span=(0, 5), match='file1'>
None
<re.Match object; span=(0, 5), match='file3'>
None
<re.Match object; span=(0, 5), match='file1'>
<re.Match object; span=(6, 11), match='file3'>

하이픈(-) 을 사용한 문자 클래스

  •  [A-Za-z] : 알파벳 모두
  •  [0-9] : 숫자
# 모든 문자, 숫자
pat1 = re.compile('file[A-Za-z]')
pat2 = re.compile('file[0-9]')

print(pat1.match('fileA')) # 일치
print(pat1.match('fileX')) # 일치
print(pat1.match('filec')) # 일치
print(pat1.match('filef')) # 일치
print(pat1.match('file ')) # 불일치

print(pat2.match('file1')) # 일치

결과

<re.Match object; span=(0, 5), match='fileA'>
<re.Match object; span=(0, 5), match='fileX'>
<re.Match object; span=(0, 5), match='filec'>
<re.Match object; span=(0, 5), match='filef'>
None
<re.Match object; span=(0, 5), match='file1'>
# 모든 숫자
pat3 = re.compile('file\d')
# 모든 숫자가 아닌
pat2 = re.compile('file[^0-9]')
pat3 = re.compile('file\D')

print(pat2.match('file1')) # 일치

print(pat3.match('fileA')) # 불일치
print(pat3.match('file3')) # 일치
print(pat3.match('file ')) # 불일치

 

결과

None
<re.Match object; span=(0, 5), match='fileA'>
None
<re.Match object; span=(0, 5), match='file '>

자주 사용하는 문자 클래스

  •  \d , [0-9] : 숫자인 한 문자
  •  \D , [^0-9] : 숫자가 아닌 한 문자
  •  \s , [ \t\n\r] : 화이트스페이스 -> 공백, 탭, Enter등을 찾을 때 사용
  •  \S , [^ \t\n\r] : 화이트스페이스가 아닌 한 문자
  •  \w , [0-9A-Za-z_] : 변수명 규칙 ( 일반 문자 , 숫자 , _ ) 
  •  \W , [^0-9A-Za-z_] : 일반문자 , 숫자 , _ 가 아닌 한 문자
pat1 = re.compile('a b')
pat2 = re.compile('a\sb')

print(pat1.match('a b'))  # 일치
print(pat1.match('a\tb')) # 불일치
print(pat1.match('a\nb')) # 불일치

print(pat2.match('a b'))  # 일치
print(pat2.match('a\tb')) # 일치
print(pat2.match('a\nb')) # 일치

 

결과

<re.Match object; span=(0, 3), match='a b'>
None
None
<re.Match object; span=(0, 3), match='a b'>
<re.Match object; span=(0, 3), match='a\tb'>
<re.Match object; span=(0, 3), match='a\nb'>