자연어 처리
[정규표현식] re.함수명(패턴,문자열)
주니코니
2023. 7. 25. 10:08
[정규표현식]
#match, search 잘 안쓰고 findall 많이씀. find도 종종
import re
# re.함수명(패턴,문자열)
# 문자열 속에 패턴이 존재합니까? 질문에 대한 답이 출력됨
⭐⭐⭐많이 쓴다
re.search('^Hello','Hello, world!') #^ = Hello로 시작해라.
re.search('^Hello', 'Hi Hello, world!') #매치안됨
re.search('world!$','Hello, world') #매치안됨
re.search('world!$','Hello, world!') #정확히 똑같아야한다
⭐⭐⭐⭐⭐⭐⭐
#패턴에 있는 대괄호 의미 []: 문자 "한 글자"를 의미 ❤️
ex [a]: a문자 의미, [ab] a또는b문자 의미
[a-c] a또는 b또는 c문자 의미
re.match('[0-9]') #0~9까지의 숫자 의미
re.match('[0-9]*','1234')
* #적어도 0~9번 숫자 "0개" 있니?
re.match('[0-3]*','1234')
#출력 : span=(0,3) match='123'
#span : 매치된 문자 범위(range와 동일하게 인덱스를 가리킴)
re.match('[5-9]*','1234') #0개도 매치됨 ⭐⭐
#match 함수의 특징
re.match('[0-9a-z]*','abc1234')
re.match('[0-9a-zA-Z]*','XYabs1234')
#한글도 매치가되는가? 물론
#근데 아래 코드가 헷갈린다...!!!!!! 🥲
#비교
re.match('[0-9a-zA-Z]*','홍길동XYabc1234') #0개도 매치됨
#❤️span =(0,0)
re.match('[0-9a-zA-Z]*','XYabc1234홍길동') #0개도 매치됨
#❤️span =(0,9)
re.match('[0-9a-zA-Zㄱ-ㅎ가-힣]*','ㅋㅋㅋ홍길동XYabc1234')
#❤️ 완벽히 매치
re.match('[0-9]+','1234') # + 의미 : 반드시 1개 이상 ⭐
비교
1. re.match('[0-9]+[가-힣]+[0-9]+','12가34') #완벽한 매치!
2. re.match('[0-9]+[가-힣]+[0-9]','12가34') #span = (0,5)
#+ 없어서 마지막 숫자 4는 매치 안됨 (혼동하지 말장 ⭐ ⭐ ⭐ )
#비교 ❤️
#match : 처음부터 안맞으면 안돼안돼
re.match('[0-9]+', 'Fizz 1 2 4 Buzz Fizz 7 8')
re.search('[0-9]+', 'Fizz 1 2 4 Buzz Fizz 7 8')
#출력: <re.Match object; span=(5, 6), match='1'>
re.findall('[0-9]+', 'Fizz 1 2 4 Buzz Fizz 7 8')
#출력 : ['1', '2', '4', '7', '8']
{} 중괄호 : 반복횟수 ⭐⭐⭐⭐⭐
re.match('h{3}','hhhello')
⭐⭐⭐
#괄호 안 ^ : 제외
re.match('[^0-9]+','hello가나다HI#@999')#뒤에 숫자 앞까지 매치됨
#간단한 표현방법⭐⭐⭐
\d == [0-9]
\D == {^0-9]
\w == [a-zA-Z0-9]
\W == [^a-zA-Z0-9_] #영문 대소문자, 숫자, 밑줄 문자 제외
\s == 공백 의미
자세한 내용은
https://dojang.io/mod/page/view.php?id=2436
파이썬 코딩 도장: 43.2 범위 판단하기
이번에는 문자열이 숫자로 되어있는지 판단해보겠습니다. 다음과 같이 [ ](대괄호) 안에 숫자 범위를 넣으며 * 또는 +를 붙입니다. 숫자 범위는 0-9처럼 표현하며 *는 문자(숫자)가 0개 이상 있는지
dojang.io