Python – проверьте, что Word в строке

Я работаю с Python v2, и я пытаюсь выяснить, можете ли вы сказать, есть ли слово в строке.

Я нашел некоторую информацию об определении того, находится ли слово в строке – using .find, но есть ли способ сделать инструкцию IF. Я хотел бы иметь что-то вроде следующего:

if string.find(word): print 'success' 

Спасибо за любую помощь.

  • смещение времени питона
  • Каков наилучший способ создания всех возможных трех буквенных строк?
  • Ручное пространство в вводе аргумента
  • Как заменить значения на None в кадре данных Pandas в Python?
  • Запись в составный набор данных с переменной длиной строки через h5py (HDF5)
  • pickle не может импортировать модуль, который существует?
  • Случайный модуль не работает. ValueError: пустой диапазон для randrange () (1,1, 0)
  • разбиение файла на более мелкие файлы с использованием количества полей
  • 10 Solutions collect form web for “Python – проверьте, что Word в строке”

    Что не так с:

     if word in mystring: print 'success' 
     if 'seek' in 'those who seek shall find': print('Success!') 

    но имейте в виду, что это соответствует последовательности символов, не обязательно целому слову – например, 'word' in 'swordsmith' – «Истина». Если вы хотите только совместить целые слова, вы должны использовать регулярные выражения:

     import re def findWholeWord(w): return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search findWholeWord('seek')('those who seek shall find') # -> <match object> findWholeWord('word')('swordsmith') # -> None 

    find возвращает целое число, представляющее индекс, в котором найден элемент поиска. Если он не найден, он возвращает -1.

     haystack = 'asdf' haystack.find('a') # result: 0 haystack.find('s') # result: 1 haystack.find('g') # result: -1 if haystack.find(needle) >= 0: print 'Needle found.' else: print 'Needle not found.' 

    Если вы хотите узнать, есть ли целое слово в списке слов, разделенных пробелами, просто используйте:

     def contains_word(s, w): return (' ' + w + ' ') in (' ' + s + ' ') contains_word('the quick brown fox', 'brown') # True contains_word('the quick brown fox', 'row') # False 

    Этот элегантный метод также является самым быстрым. По сравнению с подходами Хью Ботвелла и Дасонга:

     >python -m timeit -s "def contains_word(s, w): return (' ' + w + ' ') in (' ' + s + ' ')" "contains_word('the quick brown fox', 'brown')" 1000000 loops, best of 3: 0.351 usec per loop >python -m timeit -s "import re" -s "def contains_word(s, w): return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search(s)" "contains_word('the quick brown fox', 'brown')" 100000 loops, best of 3: 2.38 usec per loop >python -m timeit -s "def contains_word(s, w): return s.startswith(w + ' ') or s.endswith(' ' + w) or s.find(' ' + w + ' ') != -1" "contains_word('the quick brown fox', 'brown')" 1000000 loops, best of 3: 1.13 usec per loop 

    Эта небольшая функция сравнивает все слова поиска в заданном тексте. Если все слова поиска найдены в тексте, возвращает длину поиска или False противном случае.

    Также поддерживает поиск строки в Юникоде.

     def find_words(text, search): """Find exact words""" dText = text.split() dSearch = search.split() found_word = 0 for text_word in dText: for search_word in dSearch: if search_word == text_word: found_word += 1 if found_word == len(dSearch): return lenSearch else: return False 

    Применение:

     find_words('çelik güray ankara', 'güray ankara') 

    Если совпадение последовательности символов недостаточно, и вам нужно сопоставить целые слова, вот простая функция, которая выполняет свою работу. Он в основном добавляет места, где это необходимо, и ищет их в строке:

     def smart_find(haystack, needle): if haystack.startswith(needle+" "): return True if haystack.endswith(" "+needle): return True if haystack.find(" "+needle+" ") != -1: return True return False 

    Это предполагает, что запятые и другие пунктуации уже были удалены.

    Вы можете разделить строку на слова и проверить список результатов.

     if word in string.split(): print 'success' 

    Расширенный способ проверить точное слово, которое нам нужно найти в длинной строке:

     import re text = "This text was of edited by Rock" #try this string also #text = "This text was officially edited by Rock" for m in re.finditer(r"\bof\b", text): if m.group(0): print "Present" else: print "Absent" 

    Вы могли бы просто добавить пробел до и после «слова».

     x = raw_input("Type your word: ") if " word " in x: print "Yes" elif " word " not in x: print "Nope" 

    Таким образом, он ищет пространство до и после «слова».

     >>> Type your word: Swordsmith >>> Nope >>> Type your word: word >>> Yes 

    Поскольку вы запрашиваете слово, а не строку, я хотел бы представить решение, которое не чувствительно к префиксам / суффиксам и игнорирует случай:

     #!/usr/bin/env python import re def is_word_in_text(word, text): """ Check if a word is in a text. Parameters ---------- word : str text : str Returns ------- bool : True if word is in text, otherwise False. Examples -------- >>> is_word_in_text("Python", "python is awesome.") True >>> is_word_in_text("Python", "camelCase is pythonic.") False >>> is_word_in_text("Python", "At the end is Python") True """ pattern = r'(^|[^\w]){}([^\w]|$)'.format(word) pattern = re.compile(pattern, re.IGNORECASE) matches = re.search(pattern, text) return bool(matches) if __name__ == '__main__': import doctest doctest.testmod() 

    Если ваши слова могут содержать специальные символы регулярных выражений (например, + ), вам понадобится re.escape(word)

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