用Python解析'时间字符串'?
问题描述:
我正在写涉及使用户按以下格式输入时间的应用程序:用Python解析'时间字符串'?
1m30s # 1 Minute, 30 Seconds
3m15s # 3 Minutes, 15 Seconds
2m25s # 2 Minutes, 25 Seconds
2m # 2 Minutes
55s # 55 Seconds
的数据可以有一个“分型号”单个“第二名称”,或两者兼而有之。什么是正确的方法来解析这些字符串到类似的格式:
{
"minutes" : 3
"seconds" : 25
}
答
import re
tests=['1m30s','3m15s','2m25s','2m','55s']
for time_str in tests:
match=re.match('(?:(\d*)m)?(?:(\d*)s)?',time_str)
if match:
minutes = int(match.group(1) or 0)
seconds = int(match.group(2) or 0)
print({'minutes':minutes,
'seconds':seconds})
# {'seconds': 30, 'minutes': 1}
# {'seconds': 15, 'minutes': 3}
# {'seconds': 25, 'minutes': 2}
# {'seconds': 0, 'minutes': 2}
# {'seconds': 55, 'minutes': 0}
答
正则表达式来拯救!
>>> import re
>>> minsec = re.compile(r'(?P<minutes>\d+)m(?P<seconds>\d+)s')
>>> result = minsec.match('1m30s')
>>> result.groupdict()
{'seconds': '30', 'minutes': '1'}
编辑:这里是一个修改后的解决方案:
import re
pattern = r'(?:(?P<minutes>\d+)m)?(?:(?P<seconds>\d+)s)?'
minsec = re.compile(pattern)
def parse(s, pat=minsec):
return pat.match(s).groupdict()
tests = ['1m30s', '30s', '10m29s']
for t in tests:
print '---'
print ' in:', t
print 'out:', parse(t)
输出:
---
in: 1m30s
out: {'seconds': '30', 'minutes': '1'}
---
in: 30s
out: {'seconds': '30', 'minutes': None}
---
in: 10m29s
out: {'seconds': '29', 'minutes': '10'}
+0
不错!我正在研究类似的回应,但你的表现更好。我从不知道如何命名比赛组。 – Colin 2010-09-09 20:39:58
我太慢了。你赢了。 – nmichaels 2010-09-09 20:40:15