如何从字符串中提取数字到多个变量?

时间:2014-06-04 23:53:56

标签: python python-3.x

我正在尝试根据位置将此字符串提取为数字。这是我的代码。

string="The time is 12:30"
time = re.findall(
        "[0-9]?[0-9]?:[0-9][0-9]", string)
if time != []:
        T=time[0]
        Min=int(T[0:2])
        Sec=int(T[3:5])

我当前代码的问题是它需要灵活。例如,用户可以输入“:30”。然后我的代码根本不起作用。

我真的需要一种方法来提取“:”之前的数字,如果有的话,然后是之后的数字。

编辑:我已经拥有了与时间功能分开的数字。我需要将该字符串转换为两个整数。

示例:2:40是数字。我想要Min = 2和Sec = 40。但是Min可以是1-60之间的任何东西,使用像列表一样的字符串不起作用

2 个答案:

答案 0 :(得分:3)

将结果字符串拆分为冒号(:)字符,而不是使用硬编码标记

>>> m, s = time[0].split(':')
>>> Min = int(m) if m != '' else 0
>>> Sec = int(s)

请注意,您无法将空字符串''转换为整数,因此分钟转换会检查该情况并将Min设置为0

修改

您还可以使用括号匹配正则表达式中的组(注意\d是“数字”的快捷方式):

>>> match = re.search("(\d?\d?):(\d\d)", "12:30")
>>> match.groups()
('12', '30')
>>> match = re.search("(\d?\d?):(\d\d)", ":30")
>>> match.groups()
('', '30')
>>> match = re.search("(\d?\d?):(\d\d)", "no time here... 1234")
>>> print(match)
None

答案 1 :(得分:1)

听起来你想做的是:

string="The time is 12:30"
time = re.findall("[0-9]?[0-9]?:[0-9][0-9]", string)
minutes, secs = time[0].strip().split(':')
print minutes, secs