「시간」의 정규 표현 만들기

결론



파이썬에 의한 「시간」의 정규 표현은 이쪽입니다.
pattern_date = r'((0?|1)[0-9]|2[0-3])[:時][0-5][0-9]分?'

# OK
# 1時10分
# 1:10
# 01:56
# 10:06
# 12:34

# NG
# 99:99

준비



환경은 Google 공동체를 사용합니다.
파이썬 버전은 다음과 같습니다.
import platform
print("python " + platform.python_version())
# python 3.6.9

정규식 검사 도구는 다음을 사용했습니다.
htps : // 레깅스 x101. 코m/
여기에서 확인하면서 정규 표현을 작성해, 코드에 구현해 갑니다.



또, Python의 정규 표현 전반에 대해서는, 이쪽이 알기 쉽습니다.
htps : // 이 m / ぅ 0404 / ms / 7135b2b96f9b0b196bf3

시간의 정규 표현식을 만들어 보자.



즉시 코드를 작성합시다.
먼저 정규식을 사용하는 라이브러리를 가져옵니다.
import re

우선,
12:34
라는 문자열과 일치하는 정규 표현식을 만듭니다.
pattern = r'12:34'

물론 이것은 정확히 일치하므로 일치합니다.
코드로 확인해 봅시다.
pattern = r'12:34'
string = r'12:34'
prog = re.compile(pattern)
result = prog.match(string)
if result:
    print(result.group())
# 12:34 

일치하는 문자열이 표시됩니다.
이후는 간단을 위해서, 정규 표현의 pattern만 기재합니다.

시간에는 「12:34」 이외에도 「01:56」이나 「10:06」등이 있습니다.
이것들에도 매치하는 정규 표현은 이하입니다.
pattern = r'\d\d:\d\d'

사용한 정규식은 다음과 같습니다.


문자
설명


\d
임의의 숫자




일치하는 문자열


\d\d
12, 34, 01, 56, 10, 06


위의 정규식은 더 쉽게 표현할 수 있습니다.
pattern = r'\d{2}:\d{2}'

새롭게 사용한 정규 표현은 이하입니다.


문자
설명


{m}
직전 문자의 m회 반복




일치하는 문자열


\d{2}
12, 34, 01, 56, 10, 06


그러나 이것으로는, 「99:99」라고 하는, 시각으로서 있을 수 없는 캐릭터 라인도 취해 버립니다.

이번에는 hh:mm 형식으로 다음 조건만 허용하기로 합니다.
  • hh:00~23
  • mm:00~59

  • 수정한 정규 표현은 이하가 됩니다.
    pattern = r'([01][0-9]|2[0-3]):[0-5][0-9]'
    

    새롭게 사용한 정규 표현은 이하입니다.


    문자
    설명


    [abc]
    a, b, c 중 하나의 문자




    일치하는 문자열


    [01][0-9]
    00~09, 10~19 즉, 00~19

    2[0-3]
    20~23

    [0-5][0-9]
    00~09, 10~19, …, 50~59 즉, 00~59


    또, 이하의 정규 표현도 사용했습니다.


    문자
    설명


    (abc|efg)
    abc 또는 efg 문자열




    일치하는 문자열


    ([01][0-9]|2[0-3])
    00~19 혹은 20~23 즉, 00~23


    이제 위의 조건만 일치하는 정규식을 만들었습니다.

    그러나 이것으로는, 「1:10」이라고 하는, 0 매립(0패딩)되어 있지 않은 것은 취할 수 없습니다.
    수정한 정규 표현은 이하가 됩니다.
    pattern = r'((0?[0-9]|1[0-9])|2[0-3]):[0-5][0-9]'
    

    새롭게 사용한 정규 표현은 이하입니다.


    문자
    설명


    ?
    직전의 문자의 0회 또는 1회의 반복




    일치하는 문자열


    0?[0-9]
    0~9 또는 00~09


    이것은 다음과 같이 좀 더 짧게 쓸 수도 있습니다.
    pattern = r'((0?|1)[0-9]|2[0-3]):[0-5][0-9]'
    

    이제 0 채우기 (0 패딩)없이도 대응할 수있었습니다.

    또한 ":(콜론)"뿐만 아니라 "-(하이픈)"과 "시(분)"에도 일치하도록 수정합시다.
    pattern = r'((0?|1)[0-9]|2[0-3])[:時][0-5][0-9]分?'
    

    요약



    이번에는 Python을 사용하여 '시간'의 정규 표현식을 만들어 보았습니다.

    날짜나 시간, 금액 등 어느 정도 패턴이 정해진 문자열은 정규 표현과의 궁합이 좋습니다.
    다양한 문자열을 정규 표현식으로 꺼내보세요.

    좋은 웹페이지 즐겨찾기