본문 바로가기

IT 차곡차곡/Python

[Python] 정규표현식3 - Dot(.), 반복(*, +, {m,n})

정규표현식 Dot(.)

줄바꿈 문자인 \n (Enter)을 제외한 모든 문자와 매치됨을 의미한다.

 

  • a.b : a와 b사이에 어떤 문자가 들어와도 매치된다

 

import re

pat = re.compile("a.b")

print(pat.match('a3b'))  # 일치
print(pat.match('aAb'))  # 일치
print(pat.match('a b'))  # 일치
print(pat.match('a\tb')) # 일치
print(pat.match('a@b'))  # 일치
print(pat.match('abc'))  # 불일치(a로 시작해서 b로 끝나지 않음)
print("-------------------------------")
# 문자 ' .' 을 찾을 때
pat1 = re.compile("a[.]b")

print(pat1.match('a.b')) # 일치

print("-------------------------------")
# a로 시작하는 3글자를 찾을 때
pat2 = re.compile("a..")

print(pat2.match('ab'))  # 불일치
print(pat2.match('a  b')) # 일치
print(pat2.match('bab'))  # 불일치

 

결과

<re.Match object; span=(0, 3), match='a3b'>
<re.Match object; span=(0, 3), match='aAb'>
<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@b'>
None
-------------------------------
<re.Match object; span=(0, 3), match='a.b'>
-------------------------------
None
<re.Match object; span=(0, 3), match='a  '>
None

정규표현식 반복

  • * : 앞의 한 문자가 0번 이상 반복

          ca*t   ->   ct, cat, caat, caaat, ...., caaaaaaaat, ...

 

  • + : 앞의 한 문자가 1번 이상 반복

          ca*t   ->   cat, caat, caaat, ...

 

pat1 = re.compile('ca*t')
pat2 = re.compile('ca+t')

print(pat1.match('ct'))  # 일치
print(pat1.match('cat'))  # 일치
print(pat1.match('caaaaaaaaat'))  # 일치


print("------------------------------")
print(pat2.match('ct')) # 불일치
print(pat2.match('cat')) # 일치
print(pat2.match('caaaaaaat')) # 일치

 

결과

<re.Match object; span=(0, 2), match='ct'>
<re.Match object; span=(0, 3), match='cat'>
<re.Match object; span=(0, 11), match='caaaaaaaaat'>
------------------------------
None
<re.Match object; span=(0, 3), match='cat'>
<re.Match object; span=(0, 9), match='caaaaaaat'>

 

  •  { m ,n } : 최소 m개 부터 최대 n개까지 일치하는 패턴 검색 -> { min, max }

                 ca{3,5}t   ->   caaat, caaaat, caaaaat

  •  m(최소)가 생략되면, 최소 0개 부터를 의미한다.
  •  n(최대)가 생략되면, 무한대까지를 의미한다.

                 ca{,3}t   ->   ct, cat, caat, caaat

                 ca{3,}t   ->   caaat, caaaat, .... , caaaaaaaaaaat, ....

  •  {m} : 반드시 m번 반복
  •  ca{0,}t   ->   ca*t 와 같다
  •  ca{1,}t   ->   ca+t 와 같다

 

pat = re.compile("ca{3,5}t")

print(pat.match('caat'))  # 불일치
print(pat.match('caaat'))  # 일치
print(pat.match('caaaaat'))  # 일치
print(pat.match('caaaaaaat'))  # 불일치

print("-----------------------------")
pat = re.compile("ca{,3}t")

print(pat.match('caat'))  # 일치
print(pat.match('caaat'))  # 일치
print(pat.match('caaaaat'))  # 불일치
print(pat.match('caaaaaaat'))  # 불일치

 

결과

None
<re.Match object; span=(0, 5), match='caaat'>
<re.Match object; span=(0, 7), match='caaaaat'>
None
-----------------------------
<re.Match object; span=(0, 4), match='caat'>
<re.Match object; span=(0, 5), match='caaat'>
None
None

 

  •  ? : 앞의 한 문자가 0번 또는 1번이 있는지 검사한다. (= 있거나 없거나 상관 없다.)

            ca{0,1}t   ->   ca?t

 

# http이거나 https로 시작하고 url주소는 \n을 제외한 어떤 문자든 상관없이 검색
pat = re.compile("https?://.+")

print(pat.match("http://www.naver.com"))  # 일치
print(pat.match("https://www.naver.com")) # 일치

 

결과

<re.Match object; span=(0, 20), match='http://www.naver.com'>
<re.Match object; span=(0, 21), match='https://www.naver.com'>