#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". А приведенные выше решения - нет )))
Комментариев нет:
Отправить комментарий