Регулярное выражение 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 - лучший язык программирования в мире.