Регулярное выражение 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'] 
  • Python Regex "не имеет атрибута"
  • Числовое значение непосредственно после обратной ссылки
  • Почему группа повторных захватов возвращает эти строки?
  • регулярное выражение для тройной цитаты
  • python - разбиение строки без удаления разделителей
  • python regex удалить комментарии
  • Re.match () возвращает всегда none
  • Как найти многострочный текст между фигурными фигурными скобками?
  •  
    Interesting Posts for Van-Lav

    Pandas читает csv как строковый тип

    Сравнение производительности Thrift, протокольных буферов, JSON, EJB, других?

    Объявление цитаты с тройной строкой Python

    Как преобразовать строку, которая уже выглядит как список в список?

    Python – Как я могу поместить строку с пробелами справа и слева?

    Как сложно перепроектировать файлы .pyd?

    Python сериализует лексические закрытия?

    Отправить файл через Django Class Based Views

    Python 2.7 Подсчет количества позиций словаря с заданным значением

    Экран Pygame замерзает, когда я его закрываю

    Python: исправление локального времени в метке времени

    cx_Oracle: ImportError: Ошибка загрузки DLL: указанная процедура не найдена

    Использование Tweepy для прослушивания потока и поиска твитов. Как остановить предыдущий поиск и прослушать только новый поток?

    Преобразовать hex в float

    управление элементами пользовательского интерфейса в wxPython с использованием потоков

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