這是這樣一個基本的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,...)'。 –
我喜歡!我知道這樣做是必然的...... –