Вернуть все целые слова в строке до заданного индекса - PullRequest
0 голосов
/ 26 апреля 2020

Допустим, у меня есть эта строка, которая составляет 42 символа

**
0         1         2       *2*  3         4
0123456789012345678901234567*8*90123456789012
The quick brown fox jumps ov*e*r the lazy dog
**

Я хочу использовать ее в качестве поискового запроса, где поисковый запрос не может быть длиннее 28 символов, что я бы сделал

searchQuery = myString[:28] возвращение >> Быстрая коричневая лиса прыгает ove

однако, я бы хотела, чтобы она возвратила Быстрая коричневая лиса прыгает , так как это целые слова в возвращаемой строке

1 Ответ

1 голос
/ 26 апреля 2020

Найдите последний индекс пробела через str.rindex, затем нарезайте его:

def whole_words_upto(string, index): 
    return string[:string[:index].rindex(' ')]


whole_words_upto('The quick brown fox jumps over the lazy dog', 28)
# 'The quick brown fox jumps'

Примечание: не обрабатывает ошибочный ввод или угловые случаи (это ваша задача; -).


Второй вариант - разделить и выполнить итерацию, проверяя совокупную длину слов перед возвратом:

def whole_words_upto(string, index): 
    total_len = 0
    words = string.split()
    for i, s in enumerate(words):
        if i > 0 and total_len + len(s) >= index:
            return ' '.join(words[:i-1])
        total_len += len(s)

    return string
...