[Python] import re - 정규표현식을 이용한 검색 match, search, findall, finditer

Yewon Choi·2020년 7월 10일
0

Python

목록 보기
19/29

📌정규 표현식

📝 문자 클래스 []

[ ] 사이의 문자들과 매치

  • [a-zA-Z] : 알파벳 모두
  • [0-9] : 숫자
  • \d - 숫자와 매치, [0-9]와 동일한 표현식이다.
  • \D - 숫자아닌 것과 매치, [^0-9]와 동일한 표현식이다.
  • \s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
  • \S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
  • \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
  • \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.

사용 예시
🙋‍♀️ 문자열 "a", "before", "dude"가 정규식 [abc] 어떻게 사용될까?
"a"는 정규식과 일치하는 문자인 "a"가 있으므로 매치
"before"는 정규식과 일치하는 문자인 "b"가 있으므로 매치
"dude"는 정규식과 일치하는 문자인 a, b, c 중 어느 하나도 포함하고 있지 않으므로 매치되지 않음

📝 Dot (.)

a.b == "a + 모든문자 + b"

사용 예시
🙋‍♀️문자열 "aab", "a0b", "abc"가 정규식 a.b와 어떻게 매치될까?
"aab"는 가운데 문자 "a"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
"a0b"는 가운데 문자 "0"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
"abc"는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.

a[.]b == "a + Dot(.)문자 + b"

사용 예시
🙋‍♀️문자열 "aab", "a0b", "abc"가 정규식 a.b와 어떻게 매치될까?
정규식 a[.]b는 "a.b" 문자열과 매치되고, "a0b" 문자열과는 매치되지 않는다.

📝 반복 (*)

"c + a(0번 이상 반복) + t"
🐥 반복횟수 0부터

📝 반복 (+)

"c + a(1번 이상 반복) + t"
🐥 반복횟수 1부터

📝 반복 ({m,n},?)

"c + a(반드시 2번 반복) + t"

"c + a(2~5회 반복) + t"

📝 옵션 (?)

"a + b(있어도 되고 없어도 된다) + c"





📌 정규식 이용한 문자열 검색

정규식을 이용한 문자열을 검색하기 위해
우선, 정규식 표현식을 컴파일 해야 한다.

사용예시

import re
p = re.compile('[a-z]+')

📝 match()

문자열의 처음부터 정규식과 매치되는지 조사한다.

문자열 전체를 검색하여 정규식과 매치되는지 조사한다.

📝 findall()

정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.

📝 finditer()

정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.





📌 사용 예시

📝 문자열을 숫자기준으로 split

re.split(r"([0-9]+)", file)

사용 예시 ) 프로그래머스 - 파일명 정렬

📝 숫자|문자|문자 구분하여 리스트에 값 저장

import re
p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)

사용 예시 ) 프로그래머스 - 다트 게임









출처: https://wikidocs.net/4308

profile
https://github.com/devAon 찰나의 개발흔적을 남기는 개발블로그 입니다 🐥 https://aonee.tistory.com 에서 Velog로 블로그 이전 작업중입니다 ! 🎶

0개의 댓글