[Python] 정규식 활용하기
정규식 기초
정규식 모듈을 불러오면 파이썬에서 정규식을 활용할 수 있다.
정규식은 기본적으로 내가 임의로 정한 형식에 맞는지(match), 혹은 그 형식에 맞는 문자열이 있는지(search) 판별하는 것이 기본이다.
아래 예시에서는 문자열 형태로 입력 받은 복소수의 형식을 나타내보았다.
import re
r = re.compile('\d+[+]\d+[i]') # 백슬래시를 써야한다!!
r.match('1+1i')
# <re.Match object; span=(0, 4), match='1+1i'>
위 정규식 형식('\d+[+]\d+[i]')은 '1개 이상의 숫자(\d+)+1개 이상의 숫자(\d+)i' 라는 문자열 형식을 정의한 것이다. (+ 대신 * 를 쓴다면 0개 이상, 즉 없어도 된다는 뜻)
하지만 이 경우, 실수 부분이나 복소수 부분이 음수일 때 마이너스 기호를 놓칠 수도 있다. 따라서 '\d'(0~9) 가 아니라, 특수문자도 포함하는 '\S'(whitespace문자를 제외한 모든 문자)를 쓰는 것이 적절해보인다.
r = re.compile('\S+[+]\S+[i]')
r.match('-1+-1i')
<re.Match object; span=(0, 6), match='-1+-1i'>
참고로, 아래 표기법 정도까지만 익혀두어도 정규식을 활용할 일이 많을 것 같다.
- \d : 0~9(숫자) == [0-9]
- \D : 숫자가 아닌 모든 문자 == [^0-9]
- \w : 숫자+문자 == [a-zA-Z0-9]
- \W : 숫자+문자가 아닌 모든 문자
- \s : whitespace문자(대표적으로 줄바꿈 문자인 \n나 공백 그 자체! (' ')) == [ \t\n\r\f\v]
- \S : whitespace문자가 아닌 모든 문자
[ ] : 대괄호 안에 문자열이 있으면 그 문자열을 포함해야함(앞에 ^이 있으면 제외)
{m,n} : 바로 앞 문자열이 m번 이상 n번 이하 반복. {m} 이라면 m번만 반복
정규식 그루핑
매치를 시킨 것은 좋지만, 실수와 허수 부분을 따로 뽑아내는 방법은 없을까?
이때 사용하는 것이 그루핑이다. 정규식의 일정한 부분에 괄호를 씌우면 그루핑을 활용할 수 있다.
r = re.compile('(\S+)[+](\S+)[i]')
a = r.match('-1+3i')
a.group(1) # '-1'
a.group(2) # '3'
괄호가 묶인 순서가 앞일수록, 바깥쪽 순서대로 그룹에 해당하는 숫자가 매겨진다.
그루핑은 숫자가 아니라 이름으로 따로 지정할 수도 있다!
r = re.compile(r'(?P<real>\S+)[+](?P<imag>\S+)[i]')
괄호 안 앞쪽에 ?P<이름> 형식으로 그룹의 이름을 지정할 수 있다.
a = r.match('-1+3i')
a.group('real') # '-1'
a.group('imag') # '3'
.
.
.
일정한 형식의 문자열을 여러 개 입력 받아 가공이 필요할 경우 정규식을 활용해보자!
Author And Source
이 문제에 관하여([Python] 정규식 활용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jssong/Python-정규식-활용하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)