python与整数匹配字符串

时间:2017-08-09 12:42:20

标签: python regex logging

我需要匹配以下字符串:'2017-08-09,08:59:20.445 INFO {peers_peak_parameters_grid} [eval_peers_peak] Evaluating batch 0 out of 2158',

我尝试过不同的正则表达式,例如:comp = re.compile("Evaluating batch ^[-+]?[0-9]+$ out of ^[-+]?[0-9]+$")

这是一个示例用法:

def get_batch_process_time(log):                                                                                                                                                                            
    loglines = log.splitlines()                                                                                                                                                                             
    comp = re.compile("Evaluating batch ^[-+]?[0-9]+$ out of ^[-+]?[0-9]+$")                                                                                                                                
    times = []                                                                                                                                                                                              
    matches = []                                                                                                                                                                                            
    for i, line in enumerate(loglines):                                                                                                                                                                     
        if comp.search(line):                                                                                                                                                                               
            time = string2datetime(line.split(' ')[0])                                                                                                                                                      
            times.append(time)                                                                                                                                                                              
            matches.append(line)                                                                                                                                                                            
    return np.array(times), matches

不幸的是,没有一条线似乎与给定的模式匹配。我假设我使用了错误的正则表达式。

正确的正则表达式是什么? 我正确使用re吗? (我应该使用匹配而不是搜索?)

1 个答案:

答案 0 :(得分:2)

^[-+]?[0-9]+$将匹配整个字符串,该字符串由可选的加号或减号操作组成,然后是非空的数字序列。

当我说一整个字符串时,因为^$是"锚点"这将分别匹配字符串的开头和结尾,这就是你的正则表达式无法工作的原因。

我想你也可以删除可选的标志部分,即[-+]?

您可以通过在regex101(请查看右上角的说明面板)或类似实用程序中测试您的正则表达式来自行找到答案。