반응형
📌정규 표현식 : 복잡한 문자열을 처리할 때 사용하는 도구
✔️ 매우 매우 중요하다고 생각한다!!!
데이터 엔지니어 업무를 해보진 않았지만, 데이터 수집, 가공, 저장에서
데이터란 거의 '문자' 혹은 '숫자'일 것이다.
- 원하는 데이터를 만드는 코드를 줄여 준다.
- 찾는 자료의 정확성을 높여준다.
- 개인 프로젝트나 프론트에서 일할 때에도 개발 속도가 단축 되는 경험을 했다.
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>로 표현하고
# 해당 그룹 제외하고 나머지 자리는 별표로 치환
얼마나 편한가, 얼마나 획기적인가, 멋있다...
반응형
댓글