정규 표현식의 예제들을 풀어가면서 보도록 하겠습니다. ( 모든 예제는 python3에서 테스트 하였습니다. )
import re
Regularexpression = re.compile(r'\d+\s\w+')
print(Regularexpression.findall('1 일, 2 이, 3 삼, 4 사, 5 오, 11 십일')
결과값
['1 일', '2 이', '3 삼', '4 사', '5 오', '11 십일']
해당 정규 표현식은 하나 또는 그 보다 많은 숫자 글자 (\d+), 그 다음에 공백 문자 (\s), 그다음에는 하나 또는 그보다 많은 문자,숫자,밑줄 글자(w+)를 가진 텍스트를 찾습니다.
import re
regex = re.compile(r'[낭만코더]')
print(regex.findall('낭만 만두 코딩 더럽다 부대찌개 지지'))
결과값
['낭', '만', '만', '코', '더']
다음 정규식은 사용자 정의 정규식으로 [] (대괄호) 안에 문자를 정의하면 각각의 모음과 일치한다. 예문에서는 한글로 되어 있기 때문에 한글의 한글자와 매칭하는 글들을 찾아 주기 때문에 결과값이 저런식으로 호출 되는 것을 알 수 있습니다. 영문으로 되는건 직접 해보시기 바랍니다.
import re
regex = re.compile(r'[^낭만코더]')
print(regex.findall('낭만 만두 코딩 더럽다 부대찌개 지지'))
결과값
[' ', '두', ' ', '딩', ' ', '럽', '다', ' ', '부', '대', '찌', '개', ' ', '지', '지']
사용자 정규식 한에 캐럿문자(^)를 두면 부정형 문자 클래스. 즉, 해당하는 반대의 ( 문자 클래스에 없는 모든 문자와 ) 모든 문자와 일치 하기 때문에 공백 문자도 포함됩니다. 따라서 해당 결과값이 발생합니다.
import re
regex = re.compile(r'^낭만')
print(regex.findall('낭만코더, 코더낭만, 만낭만낭, 테테테테낭만')
결과값
['낭만']
위 정규 표현식은 검색 텍스트의 시작 부분에서 일치하는 텍스트를 나타내는 것이다. "낭만"이라는 단어로 시작되는 텍스트에서 낭만만 뽑아내기 때문에 결과값이 저렇게 나왔습니다. 반대로 문자열이 정규식 패턴으로 끝나야 한다는 것을 하기 위해서는 $ 기호를 붙이면 됩니다. 그 부분은 직접 해보시길 바랍니다.
추가적으로 낭만 이라는 글자만 결과값에 출력되지 않고 한 문장 예를들면 낭만으로 시작되는 정규 표현식에 결과값은 "낭만코더" 이런식으로 검색되게 하기 위해서는 어떻게 해야 될지, 또 낭만이라는 글자가 끝에 오는 단어들은 어떻게 출력 시킬 수 있을지는 고민해 보시길 바랍니다.
정규식에서 .글자(점)는 와일드카드라고 하며 줄바꿈을 제외한 모든 문자와 일치합니다.
import re
regex = re.compile(r'.만')
print(regex.findall('낭만코더, 두만, 원만, 천만, 태만, 포만')
결과값
['낭만', '두만', '원만', '천만', '태만', '포만']
모든 것을 일치 시킬 필요가 있는 경우도 있습니다.
import re
regex = re.compile(r'First Name: (.*) Last Name: (.*)')
mo = regex.search('First Name: 낭만 Last Name: 코더')
print(mo.group(1))
print(mo.group(2))
결과값
낭만
코더
정규식은 그냥 많이 써보면서 삽질 해보는게 가장 많이 늘 것 같네요....