정규표현식(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. 연습
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
'Data Science > python' 카테고리의 다른 글
[python] 정규표현식을 이용한 웹 페이지 스크레이핑 (0) | 2022.01.05 |
---|---|
[python] 정규표현식 .*? 해석 (0) | 2022.01.05 |
[python] selenium 크롤링에서 class/id/name이 없는 링크 태그 접근하기 (0) | 2022.01.03 |
[python] selenium 네이버 뉴스 기사 크롤링 (0) | 2022.01.02 |
[python] selenium 웹크롤러 정리 (0) | 2022.01.02 |