我有几个小时写的字符串,我想转换成分钟
一些示例输入字符串:
50 hour
5 hrs
3 hours
5hrs
1hour
我正在尝试一些正则表达式,它将捕获所有这些并将整个事物转换为分钟值的整数
以上将变成:
3000
300
180
300
60
我对正则表达式不太熟悉。我开始玩这样的事情:
re.sub(r'^\d+[a-z]', 'blah', string)
然而,这似乎并没有太多关注。只有一个数字后跟一个字母的情况。此外,我不确定如何实际转换成分钟
答案 0 :(得分:4)
re.sub
可以使用替换函数而不是替换字符串。该函数将使用匹配对象调用,函数的返回值将用作替换字符串。
>>> import re
>>>
>>> strings =[
... '50 hour',
... '5 hrs',
... '3 hours',
... '5hrs',
... '1hour',
... ]
>>>
>>> for original in strings:
... replaced = re.sub(r'(\d+)\s*(?:hours?\b|hrs?\b)',
... lambda m: str(int(m.group(1)) * 60),
... original)
... print('{} => {}'.format(original, replaced))
...
50 hour => 3000
5 hrs => 300
3 hours => 180
5hrs => 300
1hour => 60
答案 1 :(得分:2)
<强>代码强>:
>>> import re
>>> data = """50 hour
... 5 hrs
... 3 hours
... 5hrs
... 1hour"""
>>> v = re.findall("([\d]+) *h", data)
>>> v
['50', '5', '3', '5', '1']
>>> v = map(int, v)
>>> v
[50, 5, 3, 5, 1]
>>> [i*60 for i in v]
[3000, 300, 180, 300, 60]
>>> data1 = ""
>>> for i in v:
... data1 += "\n%s"%(i*60)
...
>>> print data1
3000
300
180
300
60
>>>
>>> print '\n'.join([str(i*60) for i in v])
最好使用字符串处理。