Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35

Разбивка текста на абзацы по 200 символов

10.07.2016, 10:13. Показов 6299. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть текст:

text = 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.'

Как его можно разбить на абзацы, например по 200 символов?
Так не получается
Python
1
2
3
4
import re
 
pat = re.compile(r'(.{150, 200}\.\s)')
re.sub(pat, r'<p>\1</p>', text)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.07.2016, 10:13
Ответы с готовыми решениями:

Готов псевдокод, но не знаю, как реализовать. Разбивка текста на абзацы
Код приведён ниже с комментариями. Надеюсь, что расписано достаточно подробно. Необходимо написать программу для задания &quot;Разбивка...

Разбивка сплошного текста на смысловые абзацы
Простое задание! Необходимо написать на Python код, который выполняет Разбивку сплошного текста на смысловые абзацы. Суть:...

Не делается разбивка статей на абзацы
Такая ситуация: не делается разбивка статтей на абзацы, хотя в админке все норм. Добавил в functions.php такой код:...

13
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
10.07.2016, 12:53
Основная ошибка - в .{150, 200} пробела не должно быть.
1
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
10.07.2016, 15:03
Ничего более симпатичного в голову не приходит пока:
Python
1
2
3
4
5
6
7
8
9
10
11
12
sep = '. '
lines = text.split(sep)
res = []
piece = ''
 
for line in lines:
    piece += (line + sep)
    if len(piece) >= 200:
        res.append(piece)
        piece = ''
 
print('<p>' + '</p>\n<p>'.join(res)[:-len(sep)] + '</p>')
1
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
10.07.2016, 17:14  [ТС]
Somebody действительно, хотя консоль не показывала ошибку
shsv зато работает, как надо
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.07.2016, 18:59
Извините, ошибся, запамятовал конец текста в результат добавить
Python
1
2
3
4
5
6
7
8
9
10
11
12
sep = '. '
lines = text.split(sep)
res = []
piece = ''
 
for line in lines:
    piece += (line + sep)
    if len(piece) >= 200:
        res.append(piece)
        piece = ''
res.append(piece)
print('<p>' + '</p>\n<p>'.join(res)[:-len(sep)] + '</p>')
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
18.07.2016, 12:32
Python
1
2
pat = re.compile('(?:(?<=\A)|(?<=\. ))\w.{,198}\.')
re.sub(pat, '<p>\g<0></p>', text)
Только вот если предложение >200 символов(как последнее)?
2
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
18.07.2016, 18:47  [ТС]
Marinero, спасибо, четко отработало! А как в этой конструкции можно после первого абзаца вставить тег [more], а в конец всего текста вставить [tags]?
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.07.2016, 11:02
stanton, Проиллюстрируйте (покажите на примере). И вряд ли это будет «эта конструкция»…
И на мой вопрос ответа нет…

Добавлено через 5 минут
Python
1
re.sub(pat, '<p>\g<0></p>', text).replace('</p>', '</p><more>', 1) + '</more>\n<tags>'
1
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
20.07.2016, 11:44  [ТС]
Marinero, вопрос не совсем понял. Но все работает норм.

По поводу [more] и [tags]

Исходный текст

text = 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.'

А на выходе надо чтобы было так

<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>[more]<p>It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>[tags]

[more] после первого абзаца, а [tags] в конце всего текста (не <more>, </more> или <tags>)
Количество символов не играет роли, можно 200 ... 1000
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.07.2016, 12:04
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

Python
1
re.sub(pat, '<p>\g<0></p>', text).replace('</p>', '</p>[more]', 1) + '[tags]'
Цитата Сообщение от stanton Посмотреть сообщение
вопрос не совсем понял
Если предложение >200 символов регулярка ничего с ним делать не будет. Поэтому и вопрос: надо что-то с ним делать и что?
1
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
20.07.2016, 12:13  [ТС]
вот ваш код, который я использовал
Python
1
2
3
4
all_snippets = ' '.join(snippets)
pat = re.compile(r'(?:(?<=\A)|(?<=\. ))\w.{,1000}\.')
all_snip = re.sub(pat, r'<p>\g<0></p>', all_snippets)
return all_snip
а это результат выполнения, меня устраивает

["<p>LearnPython is a free interactive Python tutorial for people who want to learn Python, fast. Python documentation. Welcome! This is the documentation for Python , last updated Jul 15, 2016. Parts of the documentation: Описание [править] Python — мощный и простой для изучения язык программирования Beginner's Guide to Python. New to programming? Python is free and easy to learn if you know where to start! This guide will help you to get started quickly. Сообщество python-разработчиков: форум, блоги, работа, обучающие материалы, видео, ссылки. Форум программистов Python Python — красивый и местами загадочный язык Jupyter and the future of IPython¶ IPython is a growing project, with increasingly language-agnostic components PyPI - the Python Package Index. The Python Package Index is a repository of software for the Python programming language. There are currently 84579 packages here.</p> <p>Обсуждение новостей Делимся и обсуждаем новостями мира Python: статьи на IT ресурсах, записи в Что такое Python. Обучение. Сертификат. Трудоустройство. Жми! The Python Wiki Python выбирают такие компании, как Google и Intel, Cisco и Hewlett-Packard, этот язык используют в NASA для Learn to program in Python, a powerful language used by sites like YouTube and Dropbox. Python is a widely used high-level, general-purpose, interpreted, dynamic programming language Official site for the interpreted, interactive, object-oriented, extensible programming language. Includes news, documentation, free downloads, and developer information.</p> Чему Вы научитесь: Разрабатывать программы на языке программирования Python; Писать From Python Software Foundation: Python is a object oriented programming language"]
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.07.2016, 12:15
Python
1
pat = re.compile('(?:(?<=\A)|(?<=\. ))\w(?:.{,198}|[^.]{199,})\.')
1
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
20.07.2016, 16:09  [ТС]
Marinero
Python
1
re.sub(pat, '<p>\g<0></p>', text).replace('</p>', '</p>[more]', 1) + '[tags]'
Спасибо, то что надо!
0
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 1
24.01.2019, 21:55
Python
1
2
pat = re.compile('(?:(?<=\A)|(?<=\. ))\w.{,198}\.')
re.sub(pat, '<p>\g<0></p>', text)
Почему если это
Python
1
'<p>\g<0></p>'
заменить на это'\n' , у меня перевод каретки вставляется 12 раз?
и как сделать чтобы один раз вставлялся

Простите НУБ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2019, 21:55
Помогаю со студенческими работами здесь

Разбивка на абзацы, разрыв строки
Здравствуйте, уважаемые форумчане! Очень нужна Ваша помощь. По долгу службы мне регулярно нужно готовить один и тот же документ. И я...

Разделение текста на абзацы
Всем здравствуйте. Подскажите, пожалуйста. У меня есть текст, мне нужно разделить его на абзацы. Как это сделать? Подскажитес

Разбиение текста на абзацы sed
Здравствуйте, помогите , пожалуйста, решить задачку на команду sed Дан текст, разделить его на 5 абзацев по 3 предложения, а в 6 абзац...

Разбиение текста на абзацы по меткам
Вводится произвольный текст из неизвестного количества предложений. Разделить текст на строки и упорядочить по первой букве строки....

Деление на абзацы вставляемого текста
Здравствуйте. Заметил такую особенность, при вставке из визуального редактора Wordpress не делит текст на абзацы, а вставляет всё в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru