Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

:)

정규표현식, [백준]단어뒤집기2 본문

Algorithm(python)

정규표현식, [백준]단어뒤집기2

mihee 2022. 9. 21. 11:40
# 전화번호를 찾는 정규표현식 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]))
Comments