:)
정규표현식, [백준]단어뒤집기2 본문
# 전화번호를 찾는 정규표현식 0\d{1,2}[ -]?\d{3,4}[ -]?\d{3,4}를 빈칸에 입력하세요.
regex = r'
0\d{1,2}[ -]?\d{3,4}[ -]?\d{3,4}
'
# 주소록입니다. 이후 강의에서 모두 이 search_target을 사용합니다.
search_target = '''Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 정규표현식과 일치하는 부분을 모두 찾아주는 파이썬 코드입니다.
import re
result = re.findall(regex, search_target)
print("\n".join(result))
결과
02-123-4567
070-9999-9999
010 2454 3457
1. 숫자 찾기
\d # digit
2. 글자 찾기
\w
- a, b, c, 가, 나, 다, 1, 2 와 같은 문자와 숫자 포함
- 특수문자는 포함하지 않지만 _(언더스코어)는 포함
3. 하나 혹은 그 이상 연결된 숫자
\d+
- 출력 : ['02', '123', '4567', '070', '9999', '9999', '010', '2454', '3457']
4. 010, 123, 456 중 자연수를 찾기
- 처음에 1~9중 하나의 숫자가 나온 다음
- 그 뒤에는 숫자가 0개 이상 나와야 함
[1-9]\d* # * 는 0개 이상을 뜻함
5. 전화번호는 "-"을 포함하거나 포함하지 않을 수 있음
\d+-?\d+-?\d+ # ? -> 있거나 없거나를 뜻함, -? -> -가 있거나 없거나
- 출력 : ['02-123-4567', '070-9999-9999', '010', '2454', '3457']
6. 공백이 포함된 전화번호 찾기
\d+[- ]?\d+[- ]?\d+ # [- ]? -> -또는 " " 공백이 있거나 없거나 조건
search_target = '''이상한 전화번호 0030589-5-95826
Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
- {숫자1, 숫자2 } : 숫자1부터 숫자2까지 반복
\d{2,3}[- ]?\d{3,4}[- ]?\d{4}
- 출력 : ['02-123-4567', '070-9999-9999', '010 2454 3457']
1. 알파벳 중에 소문자 모음(a,e,i,o,u)만 고르기
[aeiou] # [ ] 대괄호 안에 글자를 넣으면 해당 글자를 모두 선택할 수 있음
2. 소문자 알파벳만 고르기
[a-z] # a부터 z까지
3. 연속된 영어 소문자
[a-z]+ # 소문자를 뜻하는 [a-z], 반복을 뜻하는 +
4. 한글 단어 찾기
[가-힣] # ㄱ,ㄴ,ㄷ ... ㅏ,ㅑ 이런 문자는 찾을 수 없음
5. 다양한 대표 문자
- \s 공백 문자(스페이스, 탭, 뉴라인)
- \S 공백 문자를 제외한 문자
- \D 숫자를 제외한 문자
- \W 글자 대표 문자를 제외한 글자들(특수문자, 공백 등)
[백준] 단어뒤집기2
https://www.acmicpc.net/problem/17413
1. 문자열
- 문제의 조건을 일일이 체크해 구현
import sys
s_list = sys.stdin.readline().rstrip()
flag = False
word = ''
result = ''
for s in s_list:
if s == '<':
flag = True
if word:
result += word[::-1]
word = ''
result +=s
elif s == '>':
flag = False
result +=s
elif s == ' ':
if not flag:
result +=word[::-1]
word=''
result +=s
else:
if flag:
result +=s
else:
word += s
if word:
result += word[::-1]
print(result)
2. 정규표현식
- 정규표현식으로 문자열 split
- split한 단어 중 문자or숫자로 시작하는 단어만 뒤집기
import sys
import re
s_list = sys.stdin.readline().rstrip()
s_split = re.split(r"(<[^<>]*>|[ ]+)", s_list)
# print(s_split)
print(''.join([x[::-1] if x and x[0].isalnum() else x for x in s_split]))
'Algorithm(python)' 카테고리의 다른 글
[프로그래머스]신고 결과 받기, [프로그래머스]양궁대회 (0) | 2022.10.08 |
---|---|
[프로그래머스]튜플, [프로그래머스]스킬트리 (0) | 2022.10.05 |
[백준]꽃길, [백준]도영이가 만든 맛있는 음식, [백준]부분 삼각 수열 (0) | 2022.10.05 |
[백준] 오리, [백준] 달력 (0) | 2022.09.28 |
python 문법 for algorithm (0) | 2022.08.02 |
Comments