Попытка убрать список знаков препинания для каждого слова - в конечном итоге удалить все знаки препинания - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в Python и мне трудно понять, почему я получаю определенные ошибки или что-то не работает так, как я надеялся.

Одна вещь, которую я пытаюсь сделать, - это заменить заднюю пунктуацию на все слова в предложении. Вот что у меня есть:

def beautify_sentence(sentence, punctuation): """Returns a sentence that removes all the specified trailing punctuation from words.""" sentence = [words.strip(punctuation) for words in sentence] return "".join(sentence)

Ввод:

beautify_sentence("?hello !mango! and, ban,ana yum apple!", "?!,")

Выход:

'hello mango and banana yum apple'

Но я хочу:

"hello mango and ban,ana yum apple"

Может кто-нибудь объяснить мне, почему strip () делает это и что я делаю неправильно?

Спасибо!

Ответы [ 3 ]

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

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

Использование:

def beautify_sentence(sentence, punctuation):
    """Returns a sentence that removes all the specified trailing punctuation from 
    words."""
    sentence = [word.strip(punctuation) for word in sentence.split()]
    return " ".join(sentence)

Вызов функции:

beautify_sentence("?hello !mango! and, ban,ana yum apple!", "?!,")

Возвращает:

hello mango and ban,ana yum apple
0 голосов
/ 23 апреля 2020

Вы можете использовать

(?:(?<!\w)[?!,])|(?:[?!,](?!\w))

См. демо на regex101.com .


В Python это будет:
import re
rx = re.compile(r'(?:(?<!\w)[?!,])|(?:[?!,](?!\w))')

string = rx.sub('', "?hello !mango! and, ban,ana yum apple!")
print(string)
# hello mango and ban,ana yum apple
0 голосов
/ 23 апреля 2020

Вы разбиваете свое предложение по буквам, поэтому, перед удалением начальных / конечных символов, пожалуйста, разделите ваше предложение по пробелам. Затем верните предложение, соединив слова, разделенные пробелом.

NEW:
    sentence = [words.strip(punctuation) for words in sentence.split()]
    return " ".join(sentence)
...