Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Получение первого слова из строки

#python #python_3x


Изучаю python, есть задачка - получить первое слово из строки.
Строка может начинаться с пробелов, точек и т.д (".... пример, строки "). Нужна функция,
которая вернет слово "пример".  Мой код в котором получилось получить слово, но избавиться
от запятой не получается :

def splitText(string: str):
splitted = string.split()
for x in range(len(splitted)):
    if splitted[x].isalpha():
        print(splitted[x])
        break


    

splitText("Hello world")


выведет "Hello", но если строка будет вида "Hello, world", то выведет "world"
    


Ответы

Ответ 1



В таком подходе будут найдены все слова: >>> import re >>> word = '.... пример, строки' >>> pattern = re.compile(r'\w+') >>> pattern.findall(word)[0] 'пример' В таком, только первое совпадение: >>> pattern.search(word).group() 'пример' Пример без регулярок: >>> for i in word: ... if not i.isalpha() and i != ' ': ... word = word.replace(i, '') ... >>> word ' пример строки' >>> word.split()[0].strip() 'пример'

Ответ 2



Можно проще: #!/usr/bin/env python3 import re text = '.... пример, строки' first_word = re.findall(r'\w+', text)[0] это подходит для коротких текстов. Для больших текстов, чтобы искать только первое слово вместо всех сразу: first_word = next(m.group() for m in re.finditer(r'\w+', text)) Без регулярных выражений, itertools алгоритмов, итд это можно выразить как: def first_word(text): it = iter(text) for char in it: if char.isalnum(): # found first char word = [char] for char in it: # start with second char if char.isalnum(): word.append(char) else: break return ''.join(word) raise ValueError("no words") Пример: >>> first_word('.... пример, строки') 'пример' Код пользуется тем что итераторы в Питоне являются однопроходными, поэтому второй цикл for char in it начинает со второго символа в слове (где предыдущий цикл остановился). Просто for char in text начинает каждый раз с начала с первого символа, если text это последовательность (строка в данном случае).

Ответ 3



first_word = lambda text: text.replace('.', '').replace(',', '').strip().split(' ')[0] Этот вариант сработает на тексте "Don't eat it". А приведенные выше решения - нет )))

Комментариев нет:

Отправить комментарий