2016-10-17 2 views
0

Я пытаюсь использовать оператор регулярных выражений в python для поиска текстового файла и подсчета количества раз, когда пользовательское слово появляется. Однако, когда я запускаю свой код, вместо того, чтобы получать сумму количества раз, когда это уникальное слово появляется в файле, я получаю счетчик для числовых строк в этом файле, содержащих это слово.Python regular выражение search text file count substring

Пример: слово «яблоко» существует 56 раз в текстовом файле. Появляется в 20 из 63 строк текста. Когда я запускаю свой код, консоль печатает «20» для подсчета «яблока» вместо правильного «56».

Я думал, используя метод re.findall(), он исправит это, но это не так.

import re 

#If user selects Regular Expressions as their search method 
elif user_search_method == "2": 
    print "\n>>> You selected the Regular Expressions search method" 
    f = open(filename, 'r') 
    words = sum(1 for w in f if re.findall(user_search_value, w, re.M|re.I)) 
    f.close() 
    print("Your search value of '%s' appears %s times in this file" % (user_search_value, words)) 
+0

Это именно то, что вы просите для. '1 для w в f' <здесь' w' - это строка, которую вы фильтруете на основе 'if re.findall (...)'. Если вы хотите подсчитать количество найденных совпадений, суммируйте по 'len (re.findall (...))'. – jonrsharpe

ответ

0

Вы просто добавив 1, если он соответствует, я думаю, вы не хотите, чтобы поиск, чтобы идти по линиям, так что вы можете сделать это:

words = sum(len(re.findall(user_search_value, w, re.M|re.I)) for w in f) 
+0

Работал! Спасибо. – Ryan

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