Python 为什么不是';我不是该换正则表达式工作了吗?

Python 为什么不是';我不是该换正则表达式工作了吗?,python,regex,Python,Regex,预期的句子类型: 我将在今天晚些时候4:15到达那里 我将在今天晚些时候14:06到达那里 这里没有什么值得注意的: 1-小时格式为24小时 2-小时可以是一个字母或两个字母,而分钟总是2 时间总是在句中 我所尝试的: 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`

预期的句子类型:

我将在今天晚些时候4:15到达那里

我将在今天晚些时候14:06到达那里

这里没有什么值得注意的:

1-小时格式为24小时

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

时间总是在句中

我所尝试的:

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')
我还尝试了这个正则表达式([0-3]|[01]?[0-9]):([0-5]?[0-9])$
而且它也不起作用。

这里有几个问题,但它起作用了:

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]
设置为可选。最后,将括号更改为非捕获并删除不必要的括号。

我将使用不同的正则表达式:
(0*[1-9]| 1[0-9]| 2[0-3]):[0-5][0-9]| 24:00
,这是

在给定的示例中,时间总是放在两个`内。如果在给定的时间内总是这样,您可以将正则表达式简化为

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

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

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

您正在应用字符串锚定的开始/结束,但请尝试从较大字符串的中间进行匹配。这不起作用。我试图删除它们,但也没有起作用。
4
未包含在
[01]
中。另外,去掉锚。第一个数字应该是可选的,所以
([01]*\d | 2[0-3]):([0-5]\d)| 24:00)
就可以了。同时移除开始/结束锚。好的,你能在答案中添加调整或最终代码,以便我能正确测试吗,谢谢。给出的格式是015:20,这不是我要找的。@Xufox,谢谢你给我的提示,我改编了这本书case@user9127040我修改了我的解决方案,你能再次验证它吗?使用你的第一个regex
我将在今天晚些时候55:55到达那里
将转换为
我将在今天晚些时候57:15到达那里
@GarbageCollector
55:55
是有效的输入吗?您编写了24小时格式的
re.sub(r'(?:[01]?\d | 2[0-3]):(?:[0-5]\d)| 24:00','7:15','我今天晚些时候55:55到那里。
将导致
我今天晚些时候57:15到那里
@GarbageCollector:这完全正确。
['4:15']