2017-08-09 66 views
0

我需要匹配字符串一样:'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吗? (我应该使用匹配而不是搜索吗?)

+0

你的字符串没有'out'。 ['评估批处理[ - +]?[0-9] +出[ - +]?[0-9] +'](https://regex101.com/r/B3hqgw/1)似乎工作,如果它确实。 –

+0

抱歉在这个问题上有错误。我已编辑示例字符串 – Donbeo

+0

使用此模式:'评估批[0-9] {4}中的[0-9] {4}' – hadi

回答

2

^[-+]?[0-9]+$单独会匹配一个完整的字符串,包括可选的加或减操作,然后是非空数字序列。

当我说整个字符串时,这是因为^$是分别匹配字符串的开始和结束的“锚点”,这就是为什么您的正则表达式不起作用。

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

您可以通过在regex101(检查右上角的说明面板)或类似的实用程序中测试您的正则表达式来发现自己。

+0

所以它足以去除'^'和'$'? – Donbeo

+0

@Donbeo它应该提供的例子,但我不能说你的数据,你没有描述的其余部分。 – Aaron

+0

我想他是从需要'[ - +]?'的地方复制它的,锚点是合适的。在这里大概'\ d +'就足够了。 –