JAMONGPROJECT
[DAY22] DB연동과 정규식 본문
2 정규식
정규 표현식이 왜 필요할까?
다음 과 같이 문자들의 나열이 쭉 있는 list가 있다고 하자.
[‘124’,’1241251’,’010-1234-5678’,’152515’,’126236-26362’,’2362362362’]
이 중에서 전화번호 형식을 갖춘 것들만 걸러서 찾고 싶다고 하자.
이를 지금까지 배운 for문과 split 등을 통해서 걸러내는 것도 물론 가능하지만 우리가 걸러내고 싶은 문자의 형식이 복잡해
질수록 코드가 너무 복잡해지는 문제가 있다.
이 때 필요한 것이 바로 정규식이다.
정규식
- 특정한 규칙을 가진 문자의 집합을 표현할 때 사용하는 언어
- 문자열에서 특정한 조건을 만족하는 경우를 걸러낼 때, 일반적인 조건문으로는 다소 복잡할 수도 있지만, 정규 표현식을
이용하면 매우 간단
- 파이썬에서만 쓰이는 것이 아닌 general한 방식의 언어이기 때문에 익혀 두면 다른 언어에도 도움이 됨.
- 파이썬에서 정규식은 re 모듈이 제공
- ^: 문자열의 시작
-
$: 문자열의 종료
- \b: 문자와 공백 사이를 의미한다.
- \c: 제어 문자를 의미한다.
-
\f: 폼 피드
-
\n: 개행 문자
-
\s: 공백 문자
-
\t: 탭 문자
-
\v: 수직 탭
-
\w: 단어 영문자+숫자+_(밑줄) [0-9a-zA-Z_]
-
\x: 16진수 값
-
\0: 8진수 값
-
{n} : 정확히 n번 반복할때 일치한다.
-
{n,} : n번 이상 반복할때 일치한다.
-
{n,m} : n번에서 m번 안으로 반복할때 일치한다.
-
* : 패턴이 일치하지 않거나 한번 이상 반복할때 일치한다. {0,}과 같다.
-
+ : 패턴이 한번 이상 반복할때 일치한다. {1,}과 같다.
-
? : 패턴이 일치하지 않거나 한번만 반복할때 일치한다. {0,1}과 같다.
-
i: 패턴을 대소문자 구분 없이 검사한다. 이 변경자를 사용할 경우 [a-z]로만 검사해도 자동으로 [a-zA-Z]와 같은 기능을 하게 된다. 영어가 아닌 언어(독일어, 프랑스어 등)를 다룰 때에는 버그 가능성이 있으므로 쓰지 않는 게 좋다. 대소문자라는 개념이 없는 한글, 한자, 가나문자는 이 패턴 변경자가 아무 역할도 하지 않는다.
-
s: 임의의 한 문자를 가리키는 . 메타 문자에 개행 문자(\n)도 포함시키도록 한다. 이 변경자를 사용하면 .이 줄바꿈도 임의의 한 문자로 취급하여 찾는다.
-
g: ^문자가 문장이 아닌 문서의 처음에, $ 문자가 문장의 끝(라인 피드 \n)이 아닌 주어진 문자열의 끝에 매치되게 변경한다.
-
m: 주어진 문자열에 줄바꿈이 있을 경우, 여러 줄로 취급하여 검사한다. (줄바꿈이 없다면 써도 의미가 없다.) 원래 정규표현식을 쓸 때 줄바꿈은 무시되는데, 이걸 사용하면 줄바꿈을 적용해서 검사한다. 그리고 ^은 한 줄의 시작, $는 한 줄의 끝으로 의미가 달라진다.
-
x: 공백 문자를 무시한다. 단, 이스케이프(역슬래쉬하고 같이 쓸 경우)하거나 문자 클래스 안에 있을 경우에는 예외. 정규식을 조금 더 읽기 편하게 만들어준다. 그러나 이 변경자를 지원하지 않는 엔진이 많은 게 단점이다.
-
^[0-9]*$: 숫자
-
^[a-zA-Z]*$: 영문자. 패턴변경자를 써서 /^[a-z]*$/i 같이 쓸 수 있다.
-
^[가-힣]*$: 현대 한글(유니코드를 지원하는 정규식 엔진에 한정)
-
^[ㄱ-ㅎㅏ-ㅣ가-힣]*$: 한글 자모 낱자를 포함한 모든 현대 한글
-
^[a-zA-Z0-9]*$: 영문/숫자
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
#패스트캠퍼스 #패캠챌린지 #수강료0원챌린지 #환급챌린지 #직장인인강 #직장인자기계발
#패캠인강후기 #패스트캠퍼스후기 #오공완
#한번에끝내는컴퓨터공학전공필수&인공지능심화초격차패키지Online
'Challenge > FASTCAMPUS 30일 챌린지' 카테고리의 다른 글
[DAY24] Numpy와 pandas (0) | 2023.03.15 |
---|---|
[DAY23] DB연동과 정규식 (0) | 2023.03.14 |
[DAY21] DB연동과 정규식 (0) | 2023.03.12 |
[DAY20] 병렬 처리 (0) | 2023.03.11 |
[DAY19] 병렬 처리 (0) | 2023.03.10 |
Comments