Перейти к содержимому

Как найти слово в строке python

  • автор:

Найти самое короткое слово в строке

Author24 — интернет-сервис помощи студентам

Найти самое длинное и самое короткое слово, посчитать в них гласные
Дан текст, текст состоит из предложений. В предложениях, которые заканчиваются на вопросительный.

Самое длинное слово и самое короткое слово
Разработайте программу, которая получает от пользователя 10 слов (по одному в строке), а затем.

Самое короткое слово в списке
Написать программу, вычисляющую длину самого короткого слова в предложении из трех слов.

Даны два предложения без знаков препинания (слова разделены пробелами). Найти самое короткое слово первого предложения,
Даны два предложения без знаков препинания (слова разделены пробелами). Найти самое короткое слово.

302 / 212 / 112
Регистрация: 03.12.2016
Сообщений: 409
maksssutka,

def min_len(string) return (min((len(x), x) for x in string.split())[1])

Status 418

Эксперт Python

4570 / 2338 / 601
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
avdivo, у min же key есть.
302 / 212 / 112
Регистрация: 03.12.2016
Сообщений: 409

eaa, ага)
есть

Добавлено через 1 час 47 минут

def min_len(string): return (min(string.split(), key=len))

Регистрация: 22.09.2022
Сообщений: 57

Пишет invalid syntax

Добавлено через 5 минут
как правильно оформить вывод ?

Добавлено через 8 минут
АКТУАЛЬНО

Эксперт функциональных языков программированияЭксперт Python

35997 / 20112 / 4196
Регистрация: 12.02.2012
Сообщений: 33,305
Записей в блоге: 13

ЦитатаСообщение от maksssutka Посмотреть сообщение

— чудненько! «Для сельской местности сойдет»:

1 2 3 4 5 6 7 8 9 10 11 12
def foo(sent): lst=sent.split() minl=len(sent) shortest=sent for w in lst: if len(w)minl: shortest=w minl=len(w) return shortest txt=input("Введите предложение: ") print("Самое короткое слово:",foo(txt))

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вывести самое короткое слово в предложении
Здравствуйте! Помогите решить задачу в Python. Спасибо! Дана строка-предложение на русском.

Определить, сколько раз встречается в файле самое короткое слово
Дан файл(файл нужно создать), содержащий текст на русском языке. Определить, сколько раз.

Дана строка символов. Самое длинное слово в строке и то же самое Определить количество слов в длине
Дана строка символов. Самое длинное слово в строке и то же самое Определить количество слов в.

Найти в строке самое длинное слово, в котором присутствует подряд две согласные буквы
Пользователь вводит строку произвольной длины. Найти в строке самое длинное слово, в котором.

Найти самое длинное слово в строке
Найти самое длинное слово в строке, не используя команды split.

Выведите САМОЕ короткое слово, которое в тексте встречается чаще всего
Дан текст. Выведите САМОЕ короткое слово, которое в этом тексте встречается чаще всего. Далее.

Найти самое длинное слово, начинающееся с согласной буквы, и поменять его с последним словом в строке (Pascal -> Python)
Дана строка символов.Найти самое длинное слово начинающееся с согласной буквы и поменять его с.

Или воспользуйтесь поиском по форуму:

Python: поиск слов и словосочетаний в строке с учетом морфологии

Собственно, требуется прочитать некий текстовик (или html) в строку и найти в ней указанную фразу.

Чем и как это лучше сделать? В голове летает мысль выпилить все предлоги/союзы/знаки препинания, разбить строку по пробелам в массив, с помощью pymorphy привести каждый элемент в начальную форму, собрать строку обратно, ну и искать. Но создается впечатление, что что-то здесь не так.

Системы, вроде Sphynx ищут по собственным таблицам индекса, что не приемлимо.

Поиск слова в строке Python

Как написать условие которое будет искать слово в строке? Пользователь вводит какую-то строку, например:

меня звать Олег, мне 35 лет

Тогда Python проверяет, если в вводимой строке есть слово «звать» — тогда вывести print(«Привет») . Я делаю так, но не работает так как нужно:

if mess == u'звать': print("Привет") 

Если я введу «меня звать. » то ничего не произойдет Если введу просто слово «звать» — то напишет «Привет»

Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 17 янв 2017 в 9:33
171 1 1 золотой знак 2 2 серебряных знака 12 12 бронзовых знаков
Про оператор in пишут в любом учебнике по Python
17 янв 2017 в 9:40

@andreymal: in не различает слово от подстроки: «призвать духа» содержит «звать» подстроку, но не содержит слова «звать». in сам по себе не найдёт «звать» в «Звать меня . » (регистр). Не говоря о «зовут меня . » (форма слов)

17 янв 2017 в 9:54

@jfs это всё должен был написать автор в вопросе в виде «попробовал так-то, не получается». К тому же ни про регистр, ни про форму слов в вопросе не спрашивается

17 янв 2017 в 11:06
А ещё in различает слова вместо подстрок в сочетании с spilt 🙂
17 янв 2017 в 11:07

@andreymal: согласен, что вопрос следует дополнить. Двумя руками за был бы, если бы ваш первый комментарий попросил бы автора уточнить: нужна подстрока или отдельное слово? важен ли регистр букв (большие маленькие)? итд

17 янв 2017 в 11:10

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Используйте регулярные выражения.

import re; if re.search(r'\bзвать\b', 'меня звать Олег, мне 35 лет'): print("Привет") 

Отслеживать
ответ дан 17 янв 2017 в 10:24
1,485 12 12 серебряных знаков 16 16 бронзовых знаков
А если входная строка «Олегом меня звать, мне 35 лет»?
14 мар 2019 в 11:50
@МихаилМуругов и для этой строки тоже отлично работает
15 мар 2019 в 23:54
@andreymal Вы правы. Мои знания по регуляркам немного отстали.
16 мар 2019 в 16:49

Он сравнивает целую строку с условием «звать» соответственно «звать» <> «меня звать» Я не чего не смыслю в питоне, я больше по sql. Но немного загуглив нашел, у вас должно быть так. find метод поиска в строке ,возвращает индекс первого вхождения подстроки в строку, в случае отсутствия подстроки ,возвращает -1. Имеет вид str1.find(str2,[start],[end])

if mess.find('звать') != -1 : print("Привет") 

В sql server бы это выглядело так:

declare @a varchar(100) = 'меня звать' if @a like '%звать%' print ("Привет") 

Нахождение строк, соответствующих шаблону

Если в регулярном выражениии используются специальные значения с \ , то лучше использовать синтаксис для «сырых» (raw) строк. Приведем простой пример использования «сырых» строк: предположим, что нужно написать строку, которая бы содержала два подряд идущих символа: \ и n . Мы уже знаем, что если просто написать ‘\n’ , то Python превратит это сочетание в символ переноса строки. Однако, если написать r’\n’ , то Python не будет производить никаких преобразований внутри этой строки.

Проверим, есть ли числа в строке:

if re.search(r'\d', 'Я родился 30 февраля 1930 года'): print(True) 

Часто нам не просто нужно узнать, находится ли что-то нас интересующее в строке, но и узнать, что именно нашлось. Но функция re.search возвращает не совсем то, чего бы нам хотелось:

>>> s = 'abc' >>> r = re.search('a', s) >>> r _sre.SRE_Match object; span=(0, 1), match='a'> 

Это такой объект, а нам хотелось бы саму найденную строку.

Чтобы получить найденную строку, существует метод group() :

first_match = re.search('кот.', 'Кот пришёл к коту и спросил кота: «Бойкот, котелок или скотч?»') if first_match: first_match.group() # 'кот ' else: print('Nothing found.') 

Если нужно найти в строке несколько подстрок, то каждую из них можно выделить с помощью круглых скобок.

>>> s = 'корова молоко' >>> r = re.search('(.+?оро.+?) (.+?оло.+)', s) >>> r _sre.SRE_Match object; span=(0, 12), match='корова молоко'> >>> r.group(1) 'корова' >>> r.group(2) 'молоко' 

Ограничение жадности

Если мы хотим выделить в шаблоне только часть строки и сделать её запоминающей группой, то у нас возможны случаи двойного толкования шаблона, как в примере выше:

>>> s = 'корова молоко' >>> r = re.search('(.+?оро.+?) (.+?оло.+)', s) 

В строке ‘корова молоко’ мы хотим выделить всё слово, содержащее оро до пробела после него. Поэтому в шаблоне мы пишем после слова “ограничитель” в виде пробела, подразумевая, что парсер регулярных выражений “дойдёт” до этого пробела и остановится. Но . означает любой символ, в том числе и пробел. Как будет трактоваться такое выражение? Будет ли пробел “захватываться” группой?

По умолчанию квантификаторы (прежде всего, + и * ) жадные (greedy). Это значит, что они стремятся “съесть” как можно больше символов, подходящих под шаблон. Если мы ожидаем, что в строке ‘Онегин, добрый мой приятель’ такой шаблон ‘^.+ ‘ (справа от квантификатора ограничитель в виде пробела) захватит только первое слово “Онегин”, то мы ошибаемся:

>>> s = 'Онегин, добрый мой приятель' >>> r = re.search('^.+ ', s) >>> print(r.group()) Онегин, добрый мой 

Ограничитель действует, но только это не первый, а последний пробел в строке, после “мой” перед “приятель”, а не после “Онегина”, как мы хотели.

Чтобы этот шаблон работал как нужно, необходимо ограничить жадность квантификатора. Это делается с подстановкой после него символа ? . Таким образом, чтобы квантификатор был нежадным, его следует записать так: .+? . Проверим:

>>> s = 'Онегин, добрый мой приятель' >>> r = re.search('^.+? ', s) >>> print(r.group()) Онегин, 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *