python re

이동건·2024년 3월 1일

코테 세 개의 구분자

내 풀이

def solution(myStr):
myStr= list(myStr)
for i in range(len(myStr)):
if myStr[i] == 'a' or myStr[i] == 'b' or myStr[i] =='c' :
myStr[i] = '0'
k = ''.join(myStr).split('0')
answer = list( i for i in k if not i=='')
if answer==[]:
answer.append('EMPTY')

return answer

다른사람 풀이

def solution(myStr):
answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
return answer if answer else ['EMPTY']

신기한 풀이

import re
def solution(myStr):
answer = [m for m in re.split('a|b|c',myStr) if m]
if len(answer)==0:
answer=["EMPTY"]

return answer

학습

여기서 import re와 split('a|b|c',myStr)에 대해 공부해보자
1. re는 정규표현식인 regular expression의 약자
2. 특정 패턴에 상응하는 문자열을 '검색', '치환', '제거' 하는 기능
3. 정규표현식의 도움없이도 패턴을 찾는 작업(Rule 기반)은 불완전하거나, 작업의 cost가 높음
4. ex) 이메일 형식 판별, 전화변호 형식 판별, 숫자로만 이루어진 문자열 등

Python에서는 정규표현 처리를 하기 위해 표준 라이브러리인 re 모듈을 사용한다. 정규표현 패턴를 이용한 문자열의 추출이나, 치환, 분할 등이 가능하다. 
이번 포스팅에서는 먼저 re모듈의 함수나 메소드에 대해서 설명한다.

  • 정규 표현 패턴의 컴파일 compile()
  • 매치 오브젝트
  • 문자열의 앞 부분이 매치되는가를 체크, 추출 match()
  • 선두에 한해서 매치하는지를 체크, 추출 search()
  • 문자열 전부가 매치되는가를 체크 fullmatch()
  • 매치된 부분 모두 리스트로 취득 findall()
  • 매치된 부분 모두 이터레이터(iterator)로 취득 finditer()
  • 매치된 부분을 치환 sub() subn()
  • 정규표현 패턴으로 문자열을 분할 spilt()
    그 다음에는 re모듈로 사용할 수 있는 정규표현의 패턴 문자(특수 문자), 특수 시퀀스에 대해서 설명한다. 기본적으로 표준적으로 정규표현의 구문(신택스)이지만, 플래그의 설정 (특히, re.ASCII)는 주의할 필요가 있다.
  • Python에서의 정규표현의 메타 문자, 특수 시퀀스와 주의점
  • 플래그의 설정

출처: https://engineer-mole.tistory.com/189 [매일 꾸준히, 더 깊이:티스토리]

profile
책 묵는 개발자

0개의 댓글