2

これは非常に基本的な perl の機能であり、Python で実行できると信じなければなりませんが、もちろん暗示されている場合を除き、ドキュメントには何も見つかりません...

文字列の時間フィールドを解析する非常に簡単な例を次に示します。

time=re.search("(\d+):(\d+):(\d+)", variable)

一致オブジェクトが作成されるかどうかは理解しています。しかし、私が見つけられないのは、3 つのパターンに一致する値を見つけて、時間、分、秒などの変数に入れる方法です。私が見つけたすべての使用例は、1セットの () のみを示しています。

-マーク

4

7 に答える 7

7

matchオブジェクトにはgroupsタプルを返すメソッドがあります:

hours, minutes, seconds = re.search("(\d+):(\d+):(\d+)", variable).groups()
于 2012-10-30T16:09:04.360 に答える
4

メソッドを使用してgroups、一致するグループを取得できます

>>> variable = '1:2:3'
>>> time=re.search("(\d+):(\d+):(\d+)", variable)
>>> print time
<_sre.SRE_Match object at 0x7f3917211918>
>>> print time.groups()
('1', '2', '3')

最初のグループだけが必要な場合:

>>> print time.group(1)
1

または 2 番目のグループ ( time.group(2)) など。これらは常に文字列であることに注意してください。


必要に応じて、グループに名前を付けることもできます。

>>> time=re.search("(?P<HR>\d+):(\d+):(\d+)", variable)
>>> time.group("HR")
'1'
于 2012-10-30T16:09:13.623 に答える
3

time.strptimeまたはを使用datetime.datetime.strptime():

import time
stime = time.strptime(variable, '%H:%M:%S')
hours, minutes, seconds = stime.tm_hour, stime.tm_min, stime.tm_sec
于 2012-10-30T16:09:41.043 に答える
1

名前付きグループを使用できます。

>>> pattern = re.compile("(?P<hours>\d+):(?P<minutes>\d+):(?P<seconds>\d+)")
>>> time = re.search(pattern, "12:34:56")
>>> time.group("hours")
'12'
>>> time.group("minutes")
'34'
>>> time.group("seconds")
'56'
于 2012-10-30T16:15:06.330 に答える
1

私はあなたにもう1つ良いことをします:

>>> import re
>>> variable = "12:34:56"
>>> time = re.search("(?P<hours>\d+):(?P<minutes>\d+):(?P<seconds>\d+)", variable)
>>> time.group('hours')
'12'

詳細については、ドキュメントをre参照してください。

于 2012-10-30T16:15:06.347 に答える
0

うわー-私はそれを理解しました。これはベテランのユーザーには明らかだと思いますが、私のような初心者にとっては、これについては考えもしませんでした。3つの値は、time.group(1)、2、および3に格納されます。

于 2012-10-30T16:12:11.090 に答える
0

m.groups()すべての一致を一覧表示するために使用します。

于 2012-10-30T16:09:09.300 に答える