6

私はどうやら正規表現でひどいです、それは私には意味がありません...

01:23:45文字列内のように、時間を一致させるための式が欲しいのですが。

私はこれを試しました

(r'(([0-9]*2)[:])*2([0-9]*2)

しかし、それは機能していません。タイムスタンプ全体を取得できる必要があります。私が試した他の人は、その中に2桁のようなものしか見つかりませんでした。

4

5 に答える 5

11

あなたはあなたのリピーターが間違っています私は恐れています:

r'\d{2}:\d{2}:\d{2}'

正しい構文は{n,m}、最小桁数と最大桁数、または{n}完全一致です。キャラクター\dクラスも使いやすいです[0-9]; これは、通常の(非Unicode)マッチングでも同じことを意味します。

于 2012-07-26T08:48:42.067 に答える
4

正規表現を使用する理由-適切な日時関数を使用して、検証を無料でスローします...

from datetime import datetime
time = datetime.strptime('01:23:45', '%H:%M:%S').time()
print time.hour, time.minute, time.second
# 1 23 45

ダフタイム:

>>> datetime.strptime('99:45:63', '%H:%M:%S')
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    datetime.strptime('99:45:63', '%H:%M:%S')
  File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '99:45:63' does not match format '%H:%M:%S'
于 2012-07-26T08:51:59.603 に答える
2

前の一致を2回繰り返すための適切な指定子はです{2}

[0-9]{2}
于 2012-07-26T08:48:38.557 に答える
2

代わりに*2を使用する必要があります{2}

[0-9]{2}:[0-9]{2}:[0-9]{2}
于 2012-07-26T08:49:05.943 に答える
0
import re

timestamp_regex = r'(2[0-3]|[01][0-9]|[0-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])'


print(bool(re.match(timestamp_regex, '01:23:45')))  # True
print(bool(re.match(timestamp_regex, '01:01:45')))  # True
print(bool(re.match(timestamp_regex, '01:01:01')))  # True
print(bool(re.match(timestamp_regex, '1:1:1')))     # True
print(bool(re.match(timestamp_regex, '25:1:1')))    # False

デモ:https ://ideone.com/eE0Pnb

于 2018-03-29T11:02:30.033 に答える