Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 30, 2010 11:20:41

jartasa
От:
Зарегистрирован: 2009-09-20
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярка

Подскажите регулярное выражение.
Есть текст из предложений.Нужно случайно разбить это текст на несколько блоков и занести их в кавычки.
Думаю легче всего это сделать регуляркой,подскажите пожалуйста.
Пример:
Преложение1.Предложение2.Преложение3.Предложение4.Преложение5.Предложение6.Преложение7.Предложение8.Преложение9.Предложение10.Преложение11.Предложение12.
На выходе должно получится что-то вроде этого:
“Преложение1.Предложение2.” “Преложение3.Предложение4.Преложение5.” “Предложение6.Преложение7.Предложение8.” “Преложение9.Предложение10.Преложение11.Предложение12.”



Отредактировано (Янв. 30, 2010 11:21:17)

Офлайн

#2 Янв. 30, 2010 12:24:09

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Регулярка

я думаю проще будет сплитом разбить на предложения, а потом рандомно некоторые слепить

Офлайн

#3 Янв. 30, 2010 13:21:53

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Регулярка

Можно еще так:

import random
import re

text = "Преложение1.Предложение2.Преложение3.Предложение4.Преложение5.Предложение6.Преложение7.Предложение8.Преложение9.Предложение10."

def repl(machobj):
if random.random() > 0.5:
return '%s""' % machobj.group(0)
return machobj.group(0)

result = '"' + re.sub('\.', repl, text) + '"'
плюс убрать лишние символы " в конце строки, если таковые будут.



Отредактировано (Янв. 30, 2010 13:22:28)

Офлайн

#4 Янв. 30, 2010 16:01:51

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярка

а надо именно рандомное количество предложений брать?



Офлайн

#5 Янв. 30, 2010 16:03:44

jartasa
От:
Зарегистрирован: 2009-09-20
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярка

Спасибо,очень красивое решение.
По сравнению с моим быдлокодом на 20 строк :(
А возможно разбивать на блоки по 50-100 символов ?
Ну т.е тоже самое ,но уже учитывается суммарная длина предложений.
Разбивать так же обязательно на предложения.



Отредактировано (Янв. 30, 2010 16:17:01)

Офлайн

#6 Янв. 30, 2010 16:48:19

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Регулярка

очень красивое решение.
Спасибо.
А возможно разбивать на блоки по 50-100 символов ?
Можно, конечно. Я покажу общее направление мысли, а вы уже дальше разовьете, если захотите.
import re

class TextDivider:
def __init__(self):
self.len = self.minlen = self.prev = 0

def _repl(self, machobj):
start = machobj.start()
if self.len > start and start - self.prev > self.minlen:
self.prev = start
return r'%s""' % machobj.group(0)
return machobj.group(0)

def doit(self, text, minlen):
self.minlen = minlen
self.len = len(text)
return '"' + re.sub(r'(\.)', self._repl, text) + '"'

print TextDivider().doit("Предложение1.Предложение2.Преложение3.Предложение4.Преложение5.Предложение6.Преложение7.Предложение8.Преложение9.Предложение10.", 50)



Отредактировано (Янв. 30, 2010 16:52:19)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version