정규표현식 Regular expression 줄여서 regex로 줄여서 표현하기도 한다. 정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 형식 언어로, 텍스트 검색이나 치환에 유용하게 사용된다. 정규표현식의 문법은 구현체마다 다를 수 있지만, 일반적으로 메타문자와 리터럴 문자로 구성되며, 반복, 선택, 그룹 등의 연산자를 사용할 수 있다.
예를 들어서 Python의 re 모듈을 사용하여 이메일을 겁색하는 예제를 만들어보면 아래와 같다.
import re
pattern = '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'
regex = re.compile(pattern, flags=re.IGNORECASE)
temp_email = "myemail@gmail.com"
if regex.fullmatch(temp_email):
print("Valid")
else:
print("Invalid")
flags인자로 re.IGNORECASE를 넣어 대소문자 구분을 제외한다. 또는
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}
로 직접 표현해주는 것도 방법이다.
이렇게 특정한 문자열에 대한 처리를 할 때 유용하게 사용할 수 있는 것이 정규표현식이다.
장점
단점
정규표현식을 사용할 때 r-string을 사용하면 좀 더 편하게 작성이 가능하다. r-string을 사용하면 \ 를통한 special character 처리를 하지 않기 때문에 \ 사용에 대한 복잡함이 줄어들게 된다. 자체적인 Python 의 처리 방식이 정규표현식 작성에 어려움을 주는 셈.
따라서 정규표현식을 작성할 때는 r-string을 적극 사용하는게 좋다.
re.compile 함수를 통해서 regex object를 만들어서 사용이 가능하다.
import re
regex = re.compile("[^a-z]+", flags=(re.DOTALL | re.IGNORECASE))
위와 같이 regex object를 만들고 필요에 따라서 내장함수를 사용하여서 이용이 가능하다.
regex.match("abcd1234abcd1234") # 문자열이 해당 패턴으로 시작하는지
regex.search("abcd1234abcd1234") # 해당 패턴을 가지는 문자열이 있는지 확인.
regex.findall("abcd1234abcd1234") # 해당 패턴을 가지는 문자열들 모두를 list형태로.
regex.fullmatch("abcd1234abcd1234") # 문자열 전체에 대해서 매칭이 되는지 검사한다.