본문 바로가기
정규표현식

정규 표현식

by Ele(단단) 2021. 6. 23.
반응형

 

 📌정규 표현식 : 복잡한 문자열을 처리할 때 사용하는 도구

✔️ 매우 매우 중요하다고 생각한다!!!

데이터 엔지니어 업무를 해보진 않았지만, 데이터 수집, 가공, 저장에서

데이터란 거의 '문자' 혹은 '숫자'일 것이다. 

 

  1. 원하는 데이터를 만드는 코드를 줄여 준다.
  2. 찾는 자료의 정확성을 높여준다.
  3. 개인 프로젝트나 프론트에서 일할 때에도 개발 속도가 단축 되는 경험을 했다.

re 모듈의 함수

정규식 검사 함수 

함수 이름 기능
re.match(pattern, string) string 시작 부분부터 패턴이 존재하는지 검사하여 MatchObject를 반환함.
re.search(pattern, string) string 전체에서 pattern이 존재하는지 검사하여 MatchObject를 반환함.
re.findall(pattern, string) string 전체에서 패턴과 매치되는 모든 경우를 찾아 list로 반환함.
re.finditer(pattern, string) string 전체에서 패턴과 일치하는 결과에 대한 iterater 객체를 반환함.

문자열 수정 함수

함수 이름 기능
re.sub(pattern, repl, string) string 에서 pattern과 매칭되는 부분을 repl로 수정한 문자열을 반환함.
re.subn(pattern, repl, string) re.sub()과 동일하지만, 함수의 결과를 (결과 문자열, 교체 횟수)꼴의 튜플로 반환함.

🤝 메타 문자 : 특정한 문자 혹은 계열을 표현하는 약속된 기호

메타문자 의미 예시
^ 문자열의 시작 ^www는 문자열의 맨 처음에 www가 오는 경우에 매치합니다.
$ 문자열의 끝 .com$은 문자열의 맨 끝에 .com이 오는 경우에 매치합니다.
| or 조건식 여러 가지 중 하나와 일치하면 매치합니다. `Apple|banana'
[] 문자 클래스 대괄호 [] 안에 들어있는 문자 중 하나라도 일치하면 매치합니다. [abc]는 ‘a,b,c’ 중 하나와 매칭됩니다.
\d 숫자를 나타냅니다. [0-9]
\D 숫자가 아닌 모든 문자를 나타냅니다. [^0-9]
\w 알파벳 대소문자, 숫자, 밑줄(_)을 나타냅니다. [a-zA-Z0-9_]
\W \w에 해당되지 않는 문자들을 나타냅니다. [^a-zA-Z0-9_]
\ s 공백, 탭 문자와 매칭됩니다.  
\S \s에 매칭되지 않는 모든 문자를 나타냅니다.  
\n 개행 문자를 나타냅니다.  
\ 이스케이프용 문자. 특별한 의미를 나타내는 기호를 문자 그대로 나타내려고 할 때 사용합니다. 문자열 내에서 $문자를 찾기 위해서는 \$와 같이 나타내어야 합니다.
. 모든 문자와 대응되는 기호입니다.  

수량자 : 동일한 글자나 패턴이 반복될 때 사용

수량자 의미 예시
* 0개 이상 elice*는 “elic”, “elice”, “elicee”, “eliceee…eee”와 매칭됩니다.
+ 1개 이상 *와는 달리, 적어도 해당 문자가 1개 이상이어야 매칭됩니다.
? 0개 또는 1개 elice?는 “elic”, “elice”와 매칭됩니다.
{n} n개 \d{3}은 123, 456 등 세 자릿수와 매칭됩니다.
{n, m} n개 이상, m개 이하 \w{3, 5}는 알파벳 세 자리에서 다섯 자리의 단어와 매칭됩니다.
{n,} n개 이상 a{4,}는 a가 최소 4개 이상 연속된 경우에 매칭됩니다.

그룹 : 그룹은 전체 패턴 내에서 하나로 묶여지는 패턴

"(to)ma\\1"
# 'tomato'와 같다
# 괄호로 감싼 (to)는 1번 그룹이다
# toma뒤에 1번 그룹을 붙인다는 뜻으로 \\1 이라는 표현을 쓴다
# 괄호로 감싼 단어가 2개면 첫번째가 \\1, 두번째가 \\2, 이런식으로 표현한다

p1 = "(010)\D?\d{4}\D?(\d{4})"
# 전화번호를 찾는 정규 표현식 중 1개
print("m1 결과 : ", re.sub(p1, "\g<1>-****-\g<2>", text))
# re.sub로 전화번호 중 그룹인 (010) = \g<1> , (\d{4}) = \g<2>로 표현하고
# 해당 그룹 제외하고 나머지 자리는 별표로 치환

얼마나 편한가, 얼마나 획기적인가, 멋있다...

 

반응형

댓글