Python 为什么不是';我不是该换正则表达式工作了吗?
预期的句子类型: 我将在今天晚些时候4:15到达那里 我将在今天晚些时候14:06到达那里 这里没有什么值得注意的: 1-小时格式为24小时 2-小时可以是一个字母或两个字母,而分钟总是2 时间总是在句中 我所尝试的: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`
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到达那里
@GarbageCollector55:55
是有效的输入吗?您编写了24小时格式的re.sub(r'(?:[01]?\d | 2[0-3]):(?:[0-5]\d)| 24:00','7:15','我今天晚些时候55:55到那里。
将导致我今天晚些时候57:15到那里
@GarbageCollector:这完全正确。
['4:15']