这是这样一个基本的perl的能力我必须相信你能做到这一点在Python,但我无法找到的文档任何东西,当然除非它隐含的蟒纹多个领域......记住匹配
下面是一个字符串解析时间字段的一个很简单的例子:
time=re.search("(\d+):(\d+):(\d+)", variable)
我明白如果成功匹配的对象将被创建。但我无法找到的是找出与3种模式匹配的值的方法,以便我可以将它们填入像小时,分钟和秒等变量中。我发现的所有用法示例仅显示一组()。
-mark
这是这样一个基本的perl的能力我必须相信你能做到这一点在Python,但我无法找到的文档任何东西,当然除非它隐含的蟒纹多个领域......记住匹配
下面是一个字符串解析时间字段的一个很简单的例子:
time=re.search("(\d+):(\d+):(\d+)", variable)
我明白如果成功匹配的对象将被创建。但我无法找到的是找出与3种模式匹配的值的方法,以便我可以将它们填入像小时,分钟和秒等变量中。我发现的所有用法示例仅显示一组()。
-mark
使用m.groups()
列出所有的比赛。
可以使用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)
)等。注意,这些都是总是字符串。我想通了 -
import time
stime = time.strptime(variable, '%H:%M:%S')
hours, minutes, seconds = stime.tm_hour, stime.tm_min, stime.tm_sec
'time.group(0)'将返回整个匹配,而个别组可以使用基于1的编号检索 – PaulMcG
使用time.strptime
或datetime.datetime.strptime()
:
,如果你愿意,你甚至可以命名组。我相信这对于经验丰富的用户来说显而易见,但对于像我这样的新手来说,我从来不会想到这一点。 3个值存储在time.group(1),2和3
哇:
>>> time=re.search("(?P<HR>\d+):(\d+):(\d+)", variable)
>>> time.group("HR")
'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'
我会做你一个更好:
>>> 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
了解更多详情。
对于从组(()到组变量的元组进行解包的+1。 – PaulMcG
请注意,这会给你字符串值,如果你想要整数你可以使用'map(int,...)'。 –
我喜欢!我知道这样做是必然的...... –