정규표현식(Regular Expression)
- 정규표현식을 지원하기 위해 표준모듈 re 사용
- 원하는 문자열 패턴을 정의하여, 소스문자열과의 일치여부 판단
정규표현식을 왜 쓰는걸까?
파이썬 문자열에서 기본적으로 in,find(),index() 같은 함수로 문자열이 존재하는지, 어느위치에 있는지 알려준다.
하지만 문자열안에 정수만 추출하고 싶다면 문자열에서 제공하는 함수만으로 한계가 있다. 이때 정규표현식 사용
re모듈 함수
match(패턴,문자열) : 문자열의 처음부터 시작해서 작성한 패턴이 일치하는지 확인
import re
print(re.match('a','ab')) #<re.Match object; span=(0, 1), match='a'>
print(re.match('a','ba')) #None
search(패턴,문자열) : 문자열 안에 작성한 패턴이 일치하는지 확인,
패턴이 문자열의 처음부터 일치하지 않아도 댐 (match()차이)
import re
print(re.search('a','ab')) #<re.Match object; span=(0, 1), match='a'>
print(re.search('a','ba')) #<re.Match object; span=(1, 2), match='a'>
findall(패턴,문자열) : 문자열 안에 패턴에 맞는 케이스 전부를 리스트로 반환
print(re.findall('a','aba')) #[a,a]
print(re.findall('ba','baaba')) #[ba,ba]
finditer(패턴,문자열) : 문자열 안에 패턴에 맞는 케이스 전부를 iterator 형식으로 반환
re_iter = re.finditer('ba','baaba')
for s in re_iter:
print(s)
#<re.Match object; span=(0, 2), match='ba'>
#<re.Match object; span=(3, 5), match='ba'>
fullmatch(패턴,문자열) : 문자열에 시작과 끝의 패턴이 정확하게 일치할때 반환
print(re.fullmatch('a','aa')) #None
print(re.fullmatch('a','ab')) #None
print(re.fullmatch('aa','aa')) #<re.Match object; span=(0, 2), match='aa'>
split(패턴,문자열,최대split수) : 패턴이 맞으면 이 기점으로 리스트를 쪼개하는 함수
print(re.split('a','abaabca')) #['', 'b', '', 'bc', '']
print(re.split('a','abaabca',2)) #['', 'b', 'abca']
print(re.split('a','abaabca',3)) #['', 'b', 'bca']
print(re.split('a','abaabca',4)) #['', 'b', 'bc','']
sub(패턴,교체할문자열,문자열,최대교체수) : 패턴에 맞으면 그 문자를 교체할문자열로 교체는 함수
print(re.sub('a','z','ab')) #zb
print(re.sub('a','z','aaab')) #zzzb
print(re.sub('a','z','aaab',1)) #zaab
subn(패턴,교체할문자열,문자열,최대교체수) : 패턴에 맞으면 그 문자를 교체할문자열로 교체는 함수
-> (문자열,매칭횟수) 리턴
print(re.subn('a','z','ab')) #('zb',1)
print(re.subn('a','z','aaab')) #('zzzb',3)
print(re.subn('a','z','aaab',1)) #('zaab',1)
compile : 동일한 정규식을 여러번 사용할경우 패턴을 지정
이후 함수에서는 매개변수로 검색할 전체 '문자열'만 넣으면 댐!
import re
c=re.compile('a')
print(c.match('ab'))
print(c.search('abab'))
print(c.findall('baaba'))
compile패턴
예시 : ^패턴과 match을 사용해서 문자열의 접두사인지 확인할 수 있다.
import re #정규식 이용
def solution(phone_book):
for phone_number in phone_book:
#complie패턴^ : 이 패턴으로 시작해야함
tmp = re.compile("^"+phone_number)
print(tmp)
for phone_number2 in phone_book:
if tmp.match(phone_number2) and phone_number!=phone_number2:
return False
return True
https://namhandong.tistory.com/65
파이썬 | 정규표현식(re) re.compile 사용을 위한 표현법
1. 정규 표현식 (RE : Regular Expression) 정규 표현식은 특정한 규칙을 가진 문자열 패턴을 사용하는 방식이다. 데이터 전처리에 있어서 텍스트에서 특정 문자열을 검색, 치환, 제거할 때 사용한다. 예
namhandong.tistory.com
출처
https://brownbears.tistory.com/506
[Python] re 모듈 사용법
regex는 정규 표현식으로 흔히 알려져 있습니다. 파이썬에서 정규 표현식을 사용할 때, 내장 모듈인 re를 사용하고 있습니다. re 모듈에서 제공해주는 함수들을 보면 match(), fullmatch(), findall(), search(
brownbears.tistory.com
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
'🍃 Language > Python' 카테고리의 다른 글
[Python] 문자열 애너그램(Anagrams) | Counter(), DefaultDict() (0) | 2021.07.12 |
---|---|
[Python] 커스텀한 기준으로 sort()하기 cmp_to_key() (0) | 2021.07.12 |
[python] 대문자로 변환하기 upper() / capitalize() / title() (0) | 2021.07.11 |
[python] String을 식으로 반환해주는 eval() 함수 (0) | 2021.06.22 |
[Python] 순열(permutations )과 조합(combinations) (0) | 2021.05.26 |
[Python] 파이썬 enumerate 활용법 | for문을 파이썬스럽게 (0) | 2021.05.26 |