这是一个基本的 perl 功能,我必须相信你可以在 python 中做到这一点,但我在文档中找不到任何东西,除非它是隐含的......
这是一个解析字符串中时间字段的非常简单的示例:
time=re.search("(\d+):(\d+):(\d+)", variable)
我确实了解如果成功将创建匹配对象。但是我找不到一种方法来找出与 3 种模式匹配的值,以便我可以将它们填充到小时、分钟和秒等变量中。我发现的所有用法示例都只显示了一组 ()。
-标记
您可以使用该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'
使用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
您可以使用命名组:
>>> 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'
我给你一个更好的:
>>> import re
>>> variable = "12:34:56"
>>> time = re.search("(?P<hours>\d+):(?P<minutes>\d+):(?P<seconds>\d+)", variable)
>>> time.group('hours')
'12'
有关更多详细信息,请参阅文档re
。
哇 - 我想通了。我敢肯定这对经验丰富的用户来说是显而易见的,但对于像我这样的新手来说,我永远不会想到这一点。这 3 个值存储在 time.group(1)、2 和 3 中。
用于m.groups()
列出所有匹配项。