我正在尝试根据位置将此字符串提取为数字。这是我的代码。
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之间的任何东西,使用像列表一样的字符串不起作用
答案 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