정규식(Regex Expression)
1. Snippets
1.1. 전화번호 찾기
숫자를 찾고 싶은 경우 \d를 이용하고 수량을 지정하고 싶은 경우 {}에 숫자를 기입한다. {}의 내부 숫자는 띄어쓰기 없이 입력한다.
text = "나의 전화번호는 032-123-3456 혹은 02-1234-9876 혹은 01011112222 이다."
phone_regex1 = re.compile(r"0\d{1,2}-\d{3,4}-\d{4}")
phone_regex2 = re.compile(r"0\d{9,10}")
for match in re.finditer(phone_regex1, text):
print(f'str({match.group()}) start({match.start()}) end({match.end()})')
for match in re.finditer(phone_regex2, text):
print(f'str({match.group()}) start({match.start()}) end({match.end()})')
str(032-123-3456) start(9) end(21)
str(02-1234-9876) start(25) end(37)
str(01011112222) start(41) end(52)
1.2. 쉼표로 구분된 숫자 찾기
()는 Group을 뜻한다. finall 수행시 Group은 Tuple의 인자로 출력된다.
text = """
I have a 64,000,000 years old egg.
I have 2 babies.
"""
number_regex = re.compile(r"(\d{1,3}(,\d{3})*)")
result_list = re.findall(number_regex, text)
print(result_list)
[('64,000,000', ',000'), ('2', '')]
1.3. 괄호 내의 문자열 찾기
.*는 모든 문자를 뜻하기 때문에 >의 마지막 문자열까지 하나의 match로 인식한다. .*을 사용할 경우 보통 .*?을 사용하여야 문제가 원하는 결과를 얻을 수 있다.
text = "Good <TO SERVE HUMANS> <TO SERVE DOG>"
bracket_regex = re.compile(r"<.*?>")
result_list = re.findall(bracket_regex, text)
print(result_list)
['<TO SERVE HUMANS>', '<TO SERVE DOG>']
2. 문법
2.1. Character class
\d : Digit charcters (numbers)
\w : Word characters (letters & numbers)
\s : Space characters (space, tab, \n)
\D : Non-digit
\W : Non-word
\S : None-space
2.2. 임의의 Character class
[]를 이용하여 character class를 만들 수 있다.
[aeiouAEIOU] : 모음 Character
[^aeiouAEIOU] : 모음을 제외한 Character
[\
(\
)] : () Character
2.3. 수량 지정
\d : One digit
\d? : Zero or one digit
\d* : Zero or more digits
\d+ : One or more digits
\d{3} : Exactly 3 digits
\d{3,5} : Btwn 3 and digits
\d{3,} : 3 or more digits
2.4. Anchors
^ : Start of string, or start of line in multiline pattern
\A : Start of string
$ : End of string, or end of line in multi-line pattern
\Z : End of string
\b : Word boundary
\B : Not word boundary
< : Start of word
> : End of word
3. Cheat sheet[2]
4. 참고자료
[1] https://www.youtube.com/watch?v=abrcJ9MpF60&t=1486s
[2] https://cheatography.com/davechild/cheat-sheets/regular-expressions/