2010-03-22 1 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

можно и использовать: кот файл | grep regexp1 | grep regexp2 | ... – Drakosha

+0

Предполагается работать в среде Windows, поэтому в зависимости от утилит unix это не так хорошо, я думаю ... – user265978

+0

Ваш код ссылается на переменную 'j', которая никогда не определяет' j'. Был ли 'j' определен в другом месте или он должен быть' i'? Просьба уточнить. – unutbu

ответ

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

Смежные вопросы