: 복잡한 문자열을 처리할 때 사용하는 기법
=> 정규식을 사용하면 간편, 간결하고 직관적인 코드 작성 O
==> python 에서는 정규 표현식을 지원하기 위해 re 모듈 사용 ( import re )
메타문자 : 그 문자가 가진 본래의 뜻이 아닌 다른 특별한 용도로 사용하는 문자
: [ ] 사이의 문자들과 매치
(From - To) 를 나타내기 위해 보통 "-" 을 씀. EX) [A-Z] : 대문자 알파벳 모두
출처 : https://devkingdom.tistory.com/131
: \n을 제외한 모든 문자와 매치
ex) a.b : a와 b라는 문자 사이에 어떤 문자라도 들어가면 모두 매치
but a[.]b : .은 메타 문자가 아니라 . 그 자체로의 문자 의미
* : * 바로 앞에 있는 문자가 0번 이상 반복될 때 매치 + : 최소 1번 이상 반복될 때 매치 ex) ca+t : "c + a(1번 이상 반복) + t" {m, n} : 반복 횟수가 m부터 n까지 매치 => ※ {1,}은 +와 동일하고, {0,}은 *와 동일하다. ex) ca{2}t : "c + a(반드시 2번 반복) + t" ca{2,5}t : "c + a(2~5회 반복) + t"
: 바로 앞에 있는 문자가 있어도 매치, 없어도 매치
: or 과 동일한 의미
^ : 문자열의 맨 처음과 일치하면 매치
주의 ) 문자클래스 [] 안에 사용된다면 not과 동일한 의미
\A : re.MULTILINE 옵션을 사용할 경우 ^은 각 줄의 문자열의 처음과 매치되지만 \A는 줄과 상관없이 전체 문자열의 처음하고만 매치된다.
$ : 문자열의 끝과 일치하면 매치
\Z : re.MULTILINE 옵션을 사용할 경우 $ 메타 문자와는 달리 전체 문자열의 끝과 매치된다.
\b : \b는 단어 구분자(Word boundary) (띄어쓰기!)
\B : \b 메타 문자와 반대의 경우이다. 즉 whitespace로 구분된 단어가 아닌 경우에만 매치된다.
match() : 문자열의 처음부터 정규식과 매치되는지 조사한다.
search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
finditer() : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.
=> 매치되면 객체를 돌려주고 , 안되면 None를 돌려줌 ( if문에서 자주 쓰임 )
findall() : 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.
=> 매치되면 리스트를 돌려준다.
p = re.compile('[a-z]+')
m = p.match("python")
위 코드가 축약된 형태는 다음과 같다.
m = re.match('[a-z]+', "python")
위 예처럼 사용하면 컴파일과 match 메서드를 한 번에 수행할 수 있다. 보통 한 번 만든 패턴 객체를 여러번 사용해야 할 때는 이 방법보다 re.compile을 사용하는 것이 편하다.
str = re.sub( ' 바꿀 문자열 ',' 대상 문자열 ' , " 원문자열 ")
str = re.sub( ' 바꿀 문자열 ',' 대상 문자열 ', count= 바꾸기 횟수, " 원문자열 ")
ex) 프로그래머스 - 신규 아이디 추천
import re
new_id = "...!@#*..y.abcdefghijklm"
new_id = re.sub('[^\w\-_.]','',new_id)
#출력 .....y.abcdefghijklm
출처 : 점프 투 파이썬