Найти - Пользователи
Полная версия: Регулярка
Начало » Python для новичков » Регулярка
1
jartasa
Подскажите регулярное выражение.
Есть текст из предложений.Нужно случайно разбить это текст на несколько блоков и занести их в кавычки.
Думаю легче всего это сделать регуляркой,подскажите пожалуйста.
Пример:
Преложение1.Предложение2.Преложение3.Предложение4.Преложение5.Предложение6.Преложение7.Предложение8.Преложение9.Предложение10.Преложение11.Предложение12.
На выходе должно получится что-то вроде этого:
“Преложение1.Предложение2.” “Преложение3.Предложение4.Преложение5.” “Предложение6.Преложение7.Предложение8.” “Преложение9.Предложение10.Преложение11.Предложение12.”
o7412369815963
я думаю проще будет сплитом разбить на предложения, а потом рандомно некоторые слепить
Ed
Можно еще так:
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) + '"'
плюс убрать лишние символы " в конце строки, если таковые будут.
pasaranax
а надо именно рандомное количество предложений брать?
jartasa
Спасибо,очень красивое решение.
По сравнению с моим быдлокодом на 20 строк :(
А возможно разбивать на блоки по 50-100 символов ?
Ну т.е тоже самое ,но уже учитывается суммарная длина предложений.
Разбивать так же обязательно на предложения.
Ed
очень красивое решение.
Спасибо.
А возможно разбивать на блоки по 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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB