#regex #python-3.x #string #punctuation #sentence
#регулярное выражение #python-3.x #строка #пунктуация #предложение
Вопрос:
Я хочу, чтобы разделенные предложения включали знаки препинания (например: ?, !, .) и если в конце предложения есть двойные кавычки, я хочу включить и это.
Я использовал функцию re.split () в python3, чтобы разделить мою строку на предложения. Но, к сожалению, результирующие строки не содержат знаков препинания и не заключены в двойные кавычки, если они присутствуют в конце предложения.
Вот как выглядит мой текущий код:
x = 'This is an example sentence. I want to include punctuation! What is wrong with my code? It makes me want to yell, "PLEASE HELP ME!"'
sentence = re.split('[.?!]s*', x)
Результат, который я получаю, это:
['This is an example sentence', 'I want to include punctuation', 'What is wrong with my code', 'It makes me want to yell, "PLEASE HELP ME', '"']
Ответ №1:
Попробуйте разделить при просмотре назад:
sentences = re.split('(?<=[.?!])s*', x)
print(sentences)
['This is an example sentence.', 'I want to include punctuation!',
'What is wrong with my code?', 'It makes me want to yell, "PLEASE HELP ME!"']
Этот трюк с регулярным выражением работает путем разделения, когда мы видим символ препинания сразу за нами. В этом случае мы также сопоставляем и используем любые пробелы перед нами, прежде чем продолжить ввод строки.
Вот моя посредственная попытка решить проблему с двойными кавычками:
x = 'This is an example sentence. I want to include punctuation! "What is wrong with my code?" It makes me want to yell, "PLEASE HELP ME!"'
sentences = re.split('((?<=[.?!]")|((?<=[.?!])(?!")))s*', x)
print filter(None, sentences)
['This is an example sentence.', 'I want to include punctuation!',
'"What is wrong with my code?"', 'It makes me want to yell, "PLEASE HELP ME!"']
Обратите внимание, что оно корректно разделяет даже предложения, которые заканчиваются двойными кавычками.
Комментарии:
1. Извините, у меня была скобка перед «re», так что у вас она тоже есть в вашем коде. Пожалуйста, отредактируйте это. Что касается результата, все работает, кроме знака двойных кавычек в конце строки. Вы запустили свое? У вас это сработало? Для меня знак кавычки отображается как отдельный элемент в результирующем списке.
2. @investigate311 У меня не было этой проблемы . Мы можем скорректировать мой ответ, чтобы иметь дело с двойными кавычками.
3. Обновленная версия с двойными кавычками работает для меня! Я очистил строки None и empty с помощью цикла.