Python正则表达时间到几分钟

时间:2015-12-16 06:43:53

标签: python regex

我有几个小时写的字符串,我想转换成分钟

一些示例输入字符串:

50 hour
5 hrs
3 hours
5hrs
1hour

我正在尝试一些正则表达式,它将捕获所有这些并将整个事物转换为分钟值的整数

以上将变成:

3000
300
180
300
60

我对正则表达式不太熟悉。我开始玩这样的事情:

re.sub(r'^\d+[a-z]', 'blah', string)

然而,这似乎并没有太多关注。只有一个数字后跟一个字母的情况。此外,我不确定如何实际转换成分钟

2 个答案:

答案 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)

  1. 通过正则表达式从数据中获取第一个所有数字字符串。
  2. 使用map将String转换为Integer。
  3. 使用join或for look生成最终输出。
  4. <强>代码

    >>> 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])
    

    最好使用字符串处理。