정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어이다.
복잡하게 주어진 문자열에서 특정 형식을 찾아내고 그룹핑하며 교체도 가능하다.
ex) 이메일 주소가 ㅁ@ㅁ.ㅁ 형식으로 구성되어있는지,
비밀번호가 8자리 이상이고 문자, 숫자 등의 1개 이상 포함되어 있는지
p = re.compile(r"\d")
print(p.search("whereisnumb3r"))
예시는 문장에서 숫자를 찾는 방법이다.
컴파일 한 내용을 여러 번 사용할 경우, 위와 같이 변수를 사용하는게 적합하지만
대부분의 경우, 아래와 같이 한줄로 표현하는 것이 깔끔해보인다.
print(re.search(r"\d","whereisnumb3r"))
True 면 정규표현식 매치 객체가 반환되지만,
False면 아무 것도 반환되지 않는다. (is None)
re.match("패턴", "문자열") : 문자열 처음부터 패턴이 매칭되면 매치 객체로 반환함
re.search("패턴", "문자열") : 문자열 내 어디서든 패턴이 매칭되면 매치 객체로 반환함
re.findall("패턴", "문자열") : 해당 패턴에 매칭되는 모든 것을 리스트로 반환함
re.sub("패턴", "바꿀문자열", "문자열") : 문자열 내 패턴이 매칭되면 바꿀문자열로 변환해서 반환함
Password Validation (숫자,소문자,대문자 포함 및 8자리 이상)
re.match(r"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$", 문자열)
Email Validation (ㅁ@ㅁ.ㅁ 형식으로 구성되어있는지)
re.match(r"^[a-zA-Z0-9+._-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9-.]{2,4}$", 문자열)
파이썬 정규식은 r"정규식" 형식으로 작성한다.
^A : 특정 문자열이 맨 앞에 오는지 판단함
A$ : 특정 문자열이 맨 뒤에 오는지 판단함
[] 대괄호 내에 있을 경우, 안에 있는 문자가 하나라도 있는지 판단함
[a-zA-Z0-9] 같이 -를 이용해서 묶을 수 있음
(?=표현식) : 전방탐색, 특정한 문자 앞에 일치하는 문자만 찾는다.
(?<=표현식) : 후방탐색, 특정한 문자 뒤에 일치하는 문자만 찾는다.
\d는 모든 숫자를 의미한다.
\.은 .을 의미
.는 모든 글자를 의미하고,
*는 패턴 앞에 문자가 없을 수도, 있을 수도 있다는 의미이다.
{숫자,숫자} : 해당 문자열의 개수를 판단한다. {숫자,} 또는 {,숫자} 형태로도 사용가능.
(?=.*[A-Za-z])
해당 문자열에 대소문자 알파벳이 하나 이상 있는지
(?=.*\d)
해당 문자열에 숫자가 하나 이상 있는지
(?=.*[$@$!%*#?&])
해당 문자열에 !%*#?& 개 이상 포함되어있는지를 검사해본다.
[A-Za-z\d$@$!%*#?&]{8,}
모두 있을 경우, 상기 문자들로 이루어져 있는지, 8글자 이상인지를 판별한다.
상기 조건을 모두 만족할 경우, 매치객체를 반환하고 그렇지 않을 경우 None이다.
[a-zA-Z0-9+._-]
소대문자, 숫자, +._-로 이루어져 있는지
+@[a-zA-Z0-9]
위에 패턴 이후 @가 오고 그 뒤로 소대문자, 숫자로 이루어져 있는지
+\.[a-zA-Z0-9-.]{2,4}
. 이후, 2~4글자로 구성되어있는지 판단한다.
Password와 마찬가지로 해당 내용 만족할 경우 매치객체, 그렇지 않을 경우 None.
이 외에도 더 많은 패턴 표현방식이 있다.
이후에도 블로깅해서 정리할 예정
(참고 - https://regexr.com/ , https://dojang.io/)
👍🏼👍🏼👍🏼 유익한 포스트 감사합니다