为什么我的时间不能取代正则表达式?

时间:2018-01-04 10:11:03

标签: python regex

预期的句子类型:

我今天晚些时候会在4:15

我今天晚些时候会在14:06到那里。

那里很少有人注意到:

1-小时格式为24小时

2-小时可以是一个字母或2,而分钟总是2。

3-时间总是在句子中间。

我的尝试:

import re

response = re.sub(r'^(([01]\d|2[0-3]):([0-5]\d)|24:00)$',
                                     '7:15', 'I will be there at `4:15` later today')

我也试过这个正则表达式^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$ 它也没用。

3 个答案:

答案 0 :(得分:1)

这里有几个问题,但这有效:

import re

response = re.sub(r'(?:[01]?\d|2[0-3]):(?:[0-5]\d)|24:00', '7:15', 'I will be there at `4:15` later today')
print(response)

这会产生

I will be there at `7:15` later today

你需要摆脱锚点,并使用[01]使?成为可选项。最后,将括号更改为非捕获并删除不必要的括号。

答案 1 :(得分:0)

我会使用不同的正则表达式:(0*[1-9]|1[0-9]|2[0-3]):[0-5][0-9]|24:00,这是Regular expression for matching HH:MM time format

的改编版本
import re
response = re.sub(r'(0*[1-9]|1[0-9]|2[0-3]):[0-5][0-9]|24:00',
                 '7:15', 
                 'I will be there at `4:15` later today')
print(response)

在你给出的例子中,时间总是放在两个`中。如果在给定时间内始终如此,则可以将正则表达式简化为

import re
response = re.sub(r'`.+`',
                 '7:15', 
                 'I will be there at `24:00` later today')
print(response)

答案 2 :(得分:0)

您可以尝试使用此模式的简单方法:

import re
pattern=r'\d{1,2}:\d{2}'
text='I will be there at 4:15 later today'

match=re.findall(pattern,text)
print(match)

输出:

['4:15']