Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过正则表达式从字符串获取分钟数_Python_Regex - Fatal编程技术网

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]),但没有括号,使值可以通过分组方法使用?是的,你知道了,我会更详细地检查它,因为我有更多的任务。非常感谢。