정규 표현식

J-USER·2021년 3월 23일
0

알고리즘

목록 보기
8/13
post-thumbnail

정규 표현식의 기초 - 메타 문자

정규 표현식은 메타 문자를 사용한 문자 검색을 하는데,
. ^ $ * + ? {} [] \ | () 를 사용한다.

문자 클래스 []

문자 클래스는 []내부에 문자를 넣어 사용할 수 있다.

  • [xy] : x or y 가 포함되는 것을 찾음.

  • [a-z] : a ~ z 가 포함되는 문자를 찾음.

  • [a-zA-Z] : 알파벳 모두를 찾음.

  • [\d] : 숫자와 매치, [0-9] 와 같음.

  • [\D] : 숫자가 아닌 것과 매치. [^0-9] 와 같음.

  • [\s] : 공백 문자를 찾는다.

  • [\S] : 공백이 아닌 문자를 찾는다.

  • [\t] : 탭 문자를 찾는다.

  • [\w] : 알파벳, 숫자, _를 찾는다.

  • [\W] : 특수 문자를 찾는다.

  • [^] : not을 표현해 [^xy] : x 및 y 를 제외한 문자를 의미한다.

Dot .

. 은 \n 를 제외한 모든 문자와 매치됨을 의미한다.

  • a.b : a + 모든 문자 + b 인 포멧을 매치함. (a0b , aab , avb 등등...)

반복 *

  • 은 반복 개수가 무한대로 반복될 수 있는 패턴을 의미한다.
  • ca*t : c + a(0~무한대) + t

반복 +

  • 는 반복 개수가 1이상의 반복 패턴을 의미한다.
  • ca+t : c + a(1~무한대) + t

반복 {}

{}는 반복 횟수를 사용자가 마음대로 고정할 수 있다.

  • ca{2}t : c + a(반드시 2번 반복) + t

  • ca{2,5}t : c + a( 2~5 반복 ) + t

조건 ?

? 는 반복의 {0,1}을 의미한다.

  • ca?t : c + a(있어도 되고 없어도 됨) + t

플래그

플래그는 정규 표현식의 검색 범위를 기본 검색 범위에서 설정을 변경할 수 있도록 하는 것이다.

  • \i : 검색 패턴을 비교할 때 대소문자를 구분하지 않도록 설정.

  • \g : 검색 패턴을 비교할때 모든 부분을 대상으로 검색하도록 설정 (둘 이상의 일치 항목 찾음).

  • \m : 여러 줄의 입력 문자열을 그 상태 그대로 여러 줄로 비교하도록 설정.

  • \y : 현재 위치부터 비교를 시작하도록 설정.

  • ^ : 문자열의 시작을 의미.

  • $ : 문자열의 마지막을 의미.

    • ex) ^foo : foo로 시작하는 단어를 찾음. foo$ : foo로 끝나는 단어 찾음.

⭐️ Re 모듈

re 모듈은 코테에서 문자열에 강력한 파이썬을 더욱 강력하게 해주는 무기 ⚔️이다.

match 와 유사함 그러나 문자열의 처음부터 검색하는 것이 아니라 문자열 전체를 검색함.

match

찾고자 하는 패턴이 해당 문자열에 존재하는지 여부를 나타낸다.

findall (pattern , string , flags)

찾고자 하는 패턴과 일치되는 문자열의 모든 부분을 찾아낸다.

print(re.findall('a', 'aba'))
print(re.findall('a', 'bbb'))
print(re.findall('a', 'baa'))
print(re.findall('aaa', 'aaaa'))

['a','a']
[]
['a', 'a']
['aaa']

sub (pattern , replace , target)

특정 패턴을 문자열에서 찾아 원하는 것으로 바꿈.

re.sub('(\w{%i})' %i, '\g<1> ',s)
# %i = for 문에서 선언해준 i 변수를 의미.
# word기 i 개 * i 개로 나눈 것을 각각 뒤에 공백이 있는 1개의 그룹으로 교체. 
profile
호기심많은 개발자

0개의 댓글