记住python模式匹配中的多个字段

时间:2012-10-30 16:07:17

标签: python regex

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

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

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

我知道是否会成功创建匹配对象。但我找不到的是找出与3种模式相匹配的值的方法,这样我就可以将它们填充到小时,分钟和秒等变量中。我发现的所有用法示例只显示了一组()s。

-mark

7 个答案:

答案 0 :(得分:6)

match个对象有一个返回元组的groups方法:

hours, minutes, seconds = re.search("(\d+):(\d+):(\d+)", variable).groups()

答案 1 :(得分: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'

答案 2 :(得分: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

答案 3 :(得分: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'

答案 4 :(得分:1)

我会做得更好一点:

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

有关详细信息,请参阅docs for re

答案 5 :(得分:0)

使用m.groups()列出所有匹配项。

答案 6 :(得分:0)

哇 - 我明白了。我确信这对于经验丰富的用户来说是显而易见的,但对于像我这样的新手,我从来没有想过这个。 3个值存储在time.group(1),2和3中。