2015-08-09 2 views
1

Я пытаюсь найти способ стянуть BBCode из строки. Модули, которые я нашел (BBCode и Post Markup), похоже, переводят их только в HTML, а не просто удаляют BBCode и возвращают чистую строку. Если я что-то упустил, и один из них действительно делает то, о чем я прошу, мне бы понравилось какое-то направление на нем :)Strip BBCode из строки

В противном случае существуют ли какие-либо способы скрыть код BB из строки и вернуть обычный текст?

ответ

0

В зависимости от ваших потребностей, это может быть достаточно:

#UNTESTED 
import re 
with open("some_input_file.txt") as input_file: 
    for s in input_file: 
     s = re.sub('\[.*?]','',s) 
     print s 
+0

Это будет вырезать * все * квадратные скобки и их содержимое, хотя ... плохо, если у вас есть встроенный код или некоторые смайлики или другие вещи. – MattDMo

+0

Я думаю, что именно об этом попросил ОП - «просто удалите BBCode и верните чистую строку». –

+0

Извините, я мог бы быть яснее. Я имел в виду встроенный * компьютерный код. Например, '[code] a = [1, 2, 3, 4, 5] [/ code]' является действительным BBCode, указывая блок '', но обработанный вашим ответом просто даст 'a ='. – MattDMo

2

Ваш ответ на самом деле в bbcode модуле. К сожалению, соответствующий метод не находится в documentation, но если вы выполните поиск по коду, он находится там: Parser.strip(). Например:

import bbcode 

parser = bbcode.Parser() 
code = "[code]a = [1, 2, 3, 4, 5][/code]" 
plain_txt = parser.strip(code) 
print(plain_txt) 
'a = [1, 2, 3, 4, 5]' 

К сожалению, оба Robᵩ в регулярном выражение на основе answer и postmarkup страдают от тех же проблем - неспособность различать BBCode ([list][*]Item 1[*]Item 2[/list], [color=red]I hate color-blind people![/color] и т.д.) и встроенный код пример Я выше (они оба возвращают a =), или линия, как

I'm feeling sad :[ But, eating ice cream cheers me up! :] 

, который просто возвращает

I'm feeling sad : 

Это возможно потому, что bbcode размечает строку первых, поиск допустимых лексем BBCode, и идентифицирующий остальное, как только части общего текста в. Parser.strip() затем просто выталкивает токены BBCode и снова собирает текст, в то время как методы форматирования превращают эти маркеры в разметку XHTML и сплавляются в остальном, где это необходимо.