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

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

10.07.2016, 10:13. Показов 6316. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru