Регулярное выражение Python для поиска слов в предложении

Я все еще изучаю веревки с регулярными выражениями на языке Python, и мне нужна помощь! Мне нужно регулярное выражение, которое может искать предложение для определенных слов. Мне удалось создать шаблон для поиска одного слова, но как получить другие слова, которые мне нужно найти? Как будет выглядеть шаблон re?

>>> question = "the total number of staff in 30?" >>> re_pattern = r'\btotal.*?\b' >>> m = re.findall(re_pattern, question) ['total'] 

Он должен искать слова «всего» и «персонал» Спасибо Майку

3 Solutions collect form web for “Регулярное выражение Python для поиска слов в предложении”

Используйте оператор объединения | для поиска всех слов, которые вам нужно найти:

 In [20]: re_pattern = r'\b(?:total|staff)\b' In [21]: re.findall(re_pattern, question) Out[21]: ['total', 'staff'] 

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

Например, в вопросе Сколько людей в вашем штате? вышеприведенный подход не найдет слова « штат», поскольку в конце штата нет границы слова. Вместо этого есть знак вопроса. Но если вы оставите второй \b в конце обычного выражения выше, выражение будет ошибочно обнаруживать слова в подстроках, например, общее количество полностью или суммарно .

Лучший способ выполнить то, что вы хотите, – сначала извлечь все буквенно-цифровые символы в вашем предложении, а затем выполнить поиск в этом списке для слов, которые вам нужно найти:

 In [51]: def find_all_words(words, sentence): ....: all_words = re.findall(r'\w+', sentence) ....: words_found = [] ....: for word in words: ....: if word in all_words: ....: words_found.append(word) ....: return words_found In [52]: print find_all_words(['total', 'staff'], 'The total number of staff in 30?') ['total', 'staff'] In [53]: print find_all_words(['total', 'staff'], 'My staff is totally overworked.') ['staff'] 
 question = "the total number of staff in 30?" find=["total","staff"] words=re.findall("\w+",question) result=[x for x in find if x in words] result ['total', 'staff'] 

Не могли бы вы использовать что-то помимо Regex?

Подумайте об этом и, если он будет работать, расширяется от этого решения

 >>> 'total' in question.split() True 

по аналогии

 >>> words = {'total','staff'} >>> [e for e in words if e in question.split()] ['total', 'staff'] 
  • Извлечение нескольких строк с использованием регулярного выражения Pythons
  • Python соответствует и возвращает строку между
  • Regex Python - почему конец строки ($ и \ Z) не работает с групповыми выражениями?
  • Регулярные выражения Python
  • Регулярное выражение для одиночных комментариев
  • Ошибка соответствия RE в python, путайте результат с regex101
  • regex, чтобы получить весь текст вне скобок
  • Почему использование атрибута вместо метода обеспечивает такое значительное повышение скорости Python
  • проверить имена хостов и IP-адреса (v4 и v6), используя одно регулярное выражение python?
  • Значение Python RegEx
  • Как получить строки между одним и тем же шаблоном с помощью python regex
  •  
    Interesting Posts for Van-Lav

    PyQt QFileDialog – выбор нескольких каталогов

    Быстрый способ усреднения каждого N строк в массиве .npy

    Python: максимальная глубина рекурсии превышена при вызове объекта Python

    Аннотировать бары со значениями на графиках Pandas bar

    Файл загрузки FTP работает вручную, но не удается использовать Python ftplib

    Как использовать WSGI для перенаправления пользователя с http на https

    ImportError: невозможно импортировать имя «QStringList» в PyQt5

    TensorFlow: DNNRegressor, как сохранить модель для прогнозирования

    Как переопределить представление Django с шаблоном url с расширением имен?

    Определение градиента относительно под-тензора в Theano

    Самый быстрый способ сжать размер видео с помощью библиотеки или Algo

    Имитировать прерывание клавиатуры Ctrl-C в Python во время работы в Linux

    Запись многострочных строк в ячейки с помощью openpyxl

    Установите pyserial Mac OS 10.10?

    Отображение пользователей LDAP пользователям Django с помощью Django Auth Ldap

    Python - лучший язык программирования в мире.