2010-03-22 89 views
0

我有一个变量列表:查找多个正则表达式,跳过的结果,如果正则表达式的一个不匹配

variables = ['VariableA', 'VariableB','VariableC'] 

这我要去寻找,一行行

ifile = open("temp.txt",'r') 

d = {} 

match = zeros(len(variables)) 
for line in ifile: 
    emptyCells=0 
    for i in range(len(variables)): 
     regex = r'('+variables[i]+r')[:|=|\(](-?\d+(?:\.\d+)?)(?:\))?' 
     pattern_variable = re.compile(regex) 
     match[i] = re.findall(pattern_variable, line) 

     if match[j] == []: 
      emptyCells = emptyCells+1 

    if emptyCells == 0: 
     for k, v in match[j]: 
      d.setdefault(k, []).append(v) 

要求是我只保留所有正则表达式匹配的行!

我想收集字典中变量名是键的每个变量的所有结果,并且该值成为所有匹配的列表。

提供的代码仅是我到目前为止已经发现了,并没有完全的工作尚未...

+0

u可以使用: 猫文件| grep regexp1 | grep regexp2 | ... – Drakosha 2010-03-22 11:30:02

+0

它应该在Windows环境下工作,所以取决于unix公用事业是不是很好,我猜... – user265978 2010-03-22 11:32:03

+0

您的代码引用变量'j'而不定义'j'。在别处定义了“j”还是应该是“我”?请澄清。 – unutbu 2010-03-22 11:38:42

回答

1

您可以编辑您的问题给源文件的例子,所以我们可以测试我们的解决它的办法?

反正这里有一个快速的黑客:

from collections import defaultdict 
import re 

variables = ['VariableA', 'VariableB', 'VariableC'] 
regexes = [re.compile(r'(%s)[:|=|\(](-?\d+(?:\.\d+)?)(?:\))?' % (variable,)) 
      for variable in variables] 
d = defaultdict(list) 

with open("temp.txt") as f: 
    for line in f: 
     results = [regex.search(line) for regex in regexes] 
     if all(results): 
      for m in results: 
       k, v = m.groups() 
       d[k].append(v) 

print d 
+0

这个作品完美!非常好的解决方案,谢谢!源文件中的典型行:VariableA(2)00:29:10 VariableB = 0.221 VariableC:12.600 sensI = 0.000 – user265978 2010-03-22 12:15:25