使用正则表达式启动和停止

Aar*_*ron 0 python regex

在我的程序中,我使用正则表达式直到单词break,然后我再次使用它直到单词stop.该计划的第一部分采用比赛并将其从军事时间转换为常规时间.第二部分将军事时间除以用户输入的数字.我的代码有效,但我使用了正则表达式两次.怎么可能改变我的程序所以我只使用一次正则表达式.

 with open(filename) as text:
        for line in text:
            pattern = re.search(r'((((2)([0-3]))|(([0-1])([0-9])))([0-5])([0-9]))', line)

            if pattern:

            if re.match("BREAK", line):
                break

        for line in text:
            m= re.search(r'((((2)([0-3]))|(([0-1])([0-9])))([0-5])([0-9]))', line)
            if m:

            if re.match("STOP", line):
                break   
Run Code Online (Sandbox Code Playgroud)

Joh*_*hin 5

首先,你的正则表达式中r'((((2)([0-3]))|(([0-1])([0-9])))([0-5])([0-9]))'有一些荒谬的括号.

据推测,您没有使用如此创建的捕获组.您似乎想要匹配HHMM,其中HH是00到23而MM是00到59.

r'(2[0-3]|[01][0-9])[0-5][0-9]会做同样的工作.您可以通过执行来避免剩余的捕获组r'(?:2[0-3]|[01][0-9])[0-5][0-9]'.

您可能希望通过(例如)\b在模式的每一端具有虚假匹配(例如,"blah 23456789"中的"2345").

这是代码的替代品:

import re
searcher = re.compile(r'\b(?:2[0-3]|[01][0-9])[0-5][0-9]\b').search
with open(filename) as text:
        for line in text:
            m = searcher(line)
            if m:
                do_something_1(line, m)
            if line.startswith("BREAK"): # equivalent to your code; is that what you really mean??
                break
        for line in text:
            m = searcher(line)
            if m:
                do_something_2(line, m)
            if line.startswith("STOP"): # equivalent to your code; is that what you really mean??
                break   
Run Code Online (Sandbox Code Playgroud)