[python] 정규 표현식 정리

정규표현식(regex)

일종의 문자를 표현하는 공식 → 특정 규칙이 있는 문자열 집합을 추출할 때 사용

HTML 태그를 사용한 크롤링 시 유용함

import re → 표준 모듈 re로 사용

 

1. 메타 문자(meta-characters)

- 문자의 구성을 설명하기 위해 쓰이는 문자

[abc] one of / [ ] 내부의 문자와 매칭 / [ ] 에는 or 의미 / a or b or c = a | b| c
[a-z] 문자의 범위 : a~z
[^abc] none of 부정 / (a or b or c) 가 아닌 문자
^abc 문자열의 시작 / 줄의 맨 앞의 abc만 매치
$abc 문자열의 끝 / 줄의 맨 끝의 abc만 매치
. \n 을 제외한 모든 문자
* 직전 패턴을 0번 이상 반복 (0도 가능 : 반복되지 않을 수도 있음) / 강력한 표현이므로 유의해서 사용
+ 직전 패턴을 1번 이상 반복 / 직전패턴 무조건 출현
? 직전 패턴을 0번 또는 1번 반복 (*과 달리 0 or 1 / *은 0 or 1 or 2 or..... )
{n} 직전 패턴을 n번 반복
{n,m} n번에서 m번 반복
{n,} n번 이상 반복
( ) ( )그룹으로 묶기 / 그룹화 및 변수로 지정
| or / |로 구분된 패턴을 모두 매치
\ escape / 지정자가 아닌 문자 그대로의 의미로 사용

2. 특수 문자

\d 숫자 [0-9]
\D 비숫자 ( 숫자를 제외한 모든 문자) [^0-9]
\w alphanumeric(알파벳+숫자) + '_' (underbar) [A-Za-b0-9_]
\W non-alphanumeric 문자 및 '_' 제외 [^A-Za-b0-9_]
\s 공백 문자  
\S 비공백 문자  
\b 단어 경계  
\B 비단어 경계  
\t  

 3. 정규표현식 함수

re.match(찾을패턴, 대상 문자열) 시작부터 일치하는 패턴 찾기
re.search(찾을패턴, 대상 문자열) 첫번 쨰 일치하는 패턴 찾기
re.findall(찾을패턴, 대상 문자열) 일치하는 모든 패턴 찾기
re.split(찾을패턴, 대상 문자열) 패턴에 맞게 문자열을 쪼갠 후 리스트로 반환
re.sub(찾을패턴, 변경할 값, 대상 문자열) 대체할 값을 하나 더 받아 패턴과 일치하는 모든 부분을 대체

4. 그룹화

( ) : 그룹으로 묶기 → 그룹화 및 변수 지정

  • (x)(yz) : 전체 값 xyz를 group0, x를 group1, yz를 group2에 지정
# 그룹화 및 변수 지정
regex = '(x)(yz)'
search_target = 'xyz'
m = re.match(regex, search_target)

m.group(0)
'xyz'
m.group(1)
'x'
m.group(2)
'yz'

 

5. 연습

https://regexone.com/

 

RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs

Regular expressions are extremely useful in extracting information from text such as code, log files, spreadsheets, or even documents. And while there is a lot of theory behind formal languages, the following lessons and examples will explore the more prac

regexone.com

https://programmers.co.kr/learn/courses/11/lessons/539

 

정규표현식 - 0개 이상

정규표현식으로 010, 123, 456 중 자연수를 찾으려면 어떻게 해야 할까요? 자연수는 0으로 시작하지 않으니 자연수의 첫자리는 반드시 1 ~ 9 중에 하나이어야 합니다. 그다음 자리부터는 0~9 사이의

programmers.co.kr