데이터분석
정규식표현 문법, 특수 문자, 메서드 정리
ADELA_J
2023. 7. 4. 17:14
<정규식 표현 - 문법>
문법 | 실습 코드 | 설명 |
. | .a | 문자(a) 앞에 문자 1개가 있는 패턴을 찾기![]() |
^ | ^I like | 문자열의 처음부터 일치하는 패턴을 찾기![]() |
$ | on$ | 문자열의 끝 부분부터 일치하는 패턴 찾기![]() |
* | n\d* | n 이후 숫자(\d)가 0개 이상인 패턴을 찾기![]() |
+ | n\d+ | n 이후 숫자(\d)가 1개 이상인 패턴 찾기![]() |
? | apple? | ?의 앞의 문자(e)가 있거나 없는 패턴 찾기![]() |
{m} | n\d{2} | n 이후 숫자(\d)가 2개({2})인 패턴 찾기 |
{m, n} | n\d{2,4} | n 이후 숫자(\d)가 2개 ({2}) 이상, 4개 ({4}) 이하인 패턴 찾기 |
\ | \*, \?, \+ | *, ?, +와 같은 특수 문자를 검색할 때 이스케이프 문자 사용![]() |
[ ] | [cfh]all | c,f,h 중 1개를 포함하고 나머지 문자열이 all인 패턴을 찾기![]() |
| | apple | application | apple 이나 application 중 하나만 있는 패턴을 찾기 (or 연산)![]() |
( ) | (\d+) - (\d+) - (\d+) | ()에 지정된 패턴을 찾을 때 사용 |
<정규식 특수 문자>
특수 문자 | 설명 |
\d | 숫자 1개를 의미 ([0-9]와 동일). |
\D | 숫자 이외의 문자 1개를 의미합니다 ([^0-9]와 동일) |
\s | 공백이나 탭 1개를 의미 |
\S | 공백 문자 이외의 문자 1개를 의미 |
\w | 알파벳 1개를 의미 |
\W | 알파벳 이외의 문자 1개를 의미 (한글 중국어 등등) |
<정규식 표현 - 메서드>
test = 'I like apple, I like to make application'
로 실습해봄
함수 | 실습코드 | 설명 |
search | m = re.search('[0-9]{4}', test) print(m.group()) >> None 이라 안나오는데..ㅎ |
첫 번째로 찾은 패턴의 양 끝 인덱스를 반환 |
match | m = re.match('[0-9]{4}', test) print(m) >> 요것도 none.. |
문자열의 처음부터 검색하여 찾아낸 패턴의 양 끝 인덱스 반 |
fullmatch | m = re.fullmatch('\d+\s\d+\s\d+\s\d+', test) print(bool(m)) >>False가 나옵니다 숫자가없으니 |
전체 문자열이 일치하는지 검사 |
split | m = re.split('\s', test) print(m) >> ['I', 'like', 'apple,', 'I', 'like', 'to', 'make', 'application'] |
지정된 패턴으로 잘라낸 문자열을 리스트로 반환 |
findall | m =re.findall('[0-9]{4}', test) print(m) >> [ ] |
지정된 패턴을 찾아 리스트로 반환 |
fin | m = re.finditer('[0-9]{4}', test) for match in m: |
findall 메서드와 기능이 동일하지만 iterator를 반환 |
sub | print(re.sub('\s', '-', test)) '010-1234-5678-090' |
첫번째 인자로 전달한 값(패턴)을 두 번째 인자로 전달한 값(asyspub)으로 교체 |
▲ 위 함수 중 split 은 구분 기호로 자를 수도 있다.
순서/쉼표 구분없이 그냥 리스트에 적어주면 리스트 안에 있는 기호에 맞춰 문자가 잘라져 리스트로 반환된다.