2

这是一个基本的 perl 功能,我必须相信你可以在 python 中做到这一点,但我在文档中找不到任何东西,除非它是隐含的......

这是一个解析字符串中时间字段的非常简单的示例:

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

我确实了解如果成功将创建匹配对象。但是我找不到一种方法来找出与 3 种模式匹配的值,以便我可以将它们填充到小时、分钟和秒等变量中。我发现的所有用法示例都只显示了一组 ()。

-标记

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

或第二组 ( time.group(2)) 等。请注意,这些始终是字符串。


如果您愿意,您甚至可以命名这些组:

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

使用time.strptimedatetime.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

我给你一个更好的:

>>> 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 回答