2017-01-09 3 views
0

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

for file in XDTS: 
    data_tag_regex = re.compile(r'data_tag=\"(.*?)\"') 
    if file.endswith('.xdt'): 
     xdt_file = open(file, 'r') 
     for line in xdt_file: 
      variable_names = data_tag_regex.findall(line) 
      for index, variable_name in enumerate(variable_names): 
       print(index) 
+1

Не могли бы вы предоставить все, что необходимо для проверки этого кода? Примеры данных, например, которые порождают описанную проблему? –

+0

вы можете добавить образец строки для применения этого регулярного выражения ?, какой вывод вы ожидаете от строки образца? –

+0

, вы можете захотеть включить некоторые данные образца ... –

ответ

0

У вас есть один матч в каждой строке и несколько строк совпадают. Ваш enumerate() вызова начинается с 0 каждый раз, потому что это нового вызова для каждой новой строки:

for line in xdt_file: 
    # per line, find matches 
    variable_names = data_tag_regex.findall(line) 
    # for *this line only* print the indices, counting from 0 
    for index, variable_name in enumerate(variable_names): 
     print(index) 

Если вы хотите сохранить индекс за матч по всем направлениям, вам нужно подсчитать самостоятельно:

index = 0 
for line in xdt_file: 
    variable_names = data_tag_regex.findall(line) 
    for variable_name in variable_names: 
     index += 1 
     print(index) 
+0

Да, это то, что я сделал. Я думал, что получаю все матчи, а не в строке и вернулся, чтобы удалить вопрос, но кажется, что Stack Overflow поражает быстро ... –

+0

Будет ли он чище или быстрее или лучше каким-либо другим способом прочитать все строки сразу, а затем запустить регулярное выражение? –

+0

@MattRalston: Not с точки зрения памяти. Учитывая размер файла с достаточным размером, я буду разбирать его по строкам. –