Python 通过正则表达式从字符串获取分钟数
我有任务要做。我有一个包含以下代码的测试文件:Python 通过正则表达式从字符串获取分钟数,python,regex,Python,Regex,我有任务要做。我有一个包含以下代码的测试文件: import unittest from Task302 import extract_minutes class Task302Test(unittest.TestCase): """Testy do zadania 302""" def test_simple(self): """Prosty test.""" self.assertEqual(extract_minutes("9:13"),
import unittest
from Task302 import extract_minutes
class Task302Test(unittest.TestCase):
"""Testy do zadania 302"""
def test_simple(self):
"""Prosty test."""
self.assertEqual(extract_minutes("9:13"), "13")
self.assertEqual(extract_minutes("18:44"), "44")
self.assertEqual(extract_minutes("23:59"), "59")
self.assertEqual(extract_minutes("0:00"), "00")
self.assertEqual(extract_minutes("25:14"), "<NONE>")
self.assertEqual(extract_minutes("9:61"), "<NONE>")
self.assertEqual(extract_minutes("x9:13y"), "<NONE>")
导入单元测试
从Task302导入摘录\u分钟
类Task302Test(unittest.TestCase):
“易怒的扎达尼亚302”
def测试_简单(自):
“前列腺试验”
自我评估资格(摘自会议记录(“9:13”),“13”)
自评资格(摘自会议记录(“18:44”),“44”)
自我评价标准(摘自会议记录(“23:59”),“59”)
自我评估资格(摘录分钟(“0:00”),“00”)
self.assertEqual(摘录分钟(“25:14”),“”)
self.assertEqual(节选分钟(“9:61”),“”)
self.assertEqual(摘录分钟(“x9:13y”),“”)
我编写了以下代码:
def extract_minutes(string):
pattern = '[0-1]*[0-9]+|2[0-3]:([0-5][0-9])'
r = re.compile(pattern)
m = r.search(string)
if m:
return m.group(1)
else:
return "<NONE>"
def extract_minutes(字符串):
模式=“[0-1]*[0-9]+|2[0-3]:([0-5][0-9])”
r=重新编译(模式)
m=r.search(字符串)
如果m:
返回m.group(1)
其他:
返回“”
请解释我的代码有什么问题以及如何修复。您只需要在几个小时内输入
操作符。您的正则表达式[0-1]*[0-9]+|2[0-3]:([0-5][0-9])
将0到19小时视为单独的部分,将20到23小时加上分钟视为单独的部分。我还建议您将?
替换为*
,因为*
将匹配上一个标记零次或多次,其中?
(非贪婪量词除外)将匹配上一个标记0次或1次。您必须删除字符类[0-9]
之后的+
,因为+
与前面的标记匹配一次或多次
pattern = r'\b(?:[0-1]?[0-9]|2[0-3]):([0-5][0-9])\b'
\b
称为单词边界,匹配单词字符和非单词字符。如果没有单词边界,它将匹配此x9:13y
字符串
请向我们解释有哪些错误,以便我们可以向您解释您的编解码器有什么问题,因为此
2[0-3]:([0-5][0-9])的参数“9:13”@Cris返回“无”
部分正则表达式与起始9
不匹配。这就是我解释的。如何使or运算符(|)本地化?([0-1]*[0-9])+|(2[0-3]),但没有括号,使值可以通过分组方法使用?是的,你知道了,我会更详细地检查它,因为我有更多的任务。非常感谢。