Regular Expression Base

 

Remarks

본 글은 점프 투 파이썬 - 07장 정규표현식 등을 참고하여 작성되었습니다.

1. 정규 표현식의 기초, 메타 문자

1.1 []: character class

  • [] 안에서는 ^만 meta character로 인식된다
1
2
3
4
5
6
7
8
9
10
11
[abc]: a, b, c   개의 문자라도 포함한다면 일치
[a-zA-Z]: 알파벳을 포함하면 일치
[0-9]: 숫자를 포함하면 일치
[^0-9]: 숫자가 아닌 문자만 포함하면 일치

[\d]: [0-9] 동일
[\D]: [^0-9] 동일
[\s]: [ \t\n\r\f\v] 동일 (whitespace 문자)
[\S]: [^ \t\n\r\f\v] 동일
[\w]: [a-zA-Z0-9_] 동일 (문자 + 숫자, alphanumeric)
[\W]: [^a-zA-Z0-9_] 동일

1.2 .: Dot (wildcard)

1
2
a.b: "a + 모든 문자 + b" (acb, a0b, a_b, a b)
a[.]b: "a + .을 포함하는 문자 + b"

1.3 *: Repeat (0번 이상)

1
ca*t: * 앞의 문자 a가 0 이상 반복되면 일치 (ct, cat, caat)

1.4 +: Repeat (1번 이상)

1
ca+t: + 앞의 문자 a가 1 이상 반복되면 일치 (cat, caat)

1.5 {m,n}: Repeat (m번 이상 n번 이하)

1
2
3
4
5
6
ca{2}t: {2} 앞의 문자 a가 2 반복되면 일치 (caat)
ca{2,3}t: {2} 앞의 문자 a가 2 이상 3 이하 반복되면 일치 (caat, caaat)
ca{2,}t: {2,} 앞의 문자 a가 2 이상 반복되면 일치 (caat, caaat, caaaat, ...)

ab?c: ? 앞의 문자 b가 0 이상 1 이하 반복되면 일치 (ac, abc)
  - ab{0,1}c  동일

1.6 ^: Starting position

1
^abc: abc로 시작하면 일치 (abc, abcd)

1.7 $: Ending position

1
abc$: abc로 끝나면 일치 (abc, dabc)

2. 정규 표현식 컴파일 및 실행

2.1 re.compile()

1
2
import re
p = re.compile('[a-z]+')

2.2 match()

1
2
3
4
5
6
7
p.match(s): s가 정규식에 매치되지 않으면 None을 반환

m = p.match('python')
if m:
  print("Match found:", m.group())  # m.group(): 'python'
else:
  print("No match")
1
2
3
4
5
6
7
p.search(s): s의 substring들이 정규식에 매치되지 않으면 None을 반환

m = p.search('3 python')
if m:
  print("Match found:", m.group())  # m.group(): 'python'
else:
  print("No match")

2.4 findall()

1
2
3
p.findall(s): 매치되는 모든 substring들을 list로 반환

rst = p.findall("life is too short")  # ['life', 'is', 'too', 'short']

2.5 finditer()

1
2
3
4
p.finditer(s): 매치되는 모든 substring들을 iterator로 반환

for r in p.finditer(s):
  print(r.group())

2.6 sub()

1
p.sub(r, s): string s안에서 매치되는 모든 substring를 r로 변환한 결과를 반환

2.7 컴파일 및 수행을 동시에 하기

1
2
3
4
p = re.compile('[a-z]+')
m = p.match('python')

m = re.match('[a-z]+', 'python')

2.8 match 객체의 method

1
2
3
4
5
6
m = p.match('python')

m.group(): 매치된 문자열
m.start(): 매치된 문자열의 시작 위치
m.end(): 매치된 문자열의  위치
m.span(): 매치된 문자열의 (시작,) 해당하는 tuple