Найдите несколько регулярных выражений в каждой строке и пропустите результат, если один из регулярных выражений не совпадает - PullRequest
0 голосов
/ 22 марта 2010

У меня есть список переменных:

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)

Требуется, чтобы я оставлял только те строки, где совпадают все регулярные выражения!

Я хочу собрать все результаты для каждой переменной в словаре, где имя переменной является ключом, а значение становится списком всех совпадений.

Предоставленный код - это только то, что я обнаружил до сих пор, и он еще не работает идеально ...

1 Ответ

1 голос
/ 22 марта 2010

Можете ли вы отредактировать свой вопрос, чтобы привести пример исходного файла, чтобы мы могли проверить наши решения на его основе?

В любом случае, вот быстрый взлом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...