【发布时间】:2015-08-09 04:33:14
【问题描述】:
我正在尝试找到一种从字符串中去除 BBCode 的方法。我发现的模块(BBCode 和 Post Markup)似乎只将它们转换为 HTML,而不仅仅是删除 BBCode 并返回一个干净的字符串。如果我遗漏了一些东西,而其中一个实际上做了我要问的事情,我会喜欢它的一些方向:)
否则,有什么方法可以从字符串中去除 BB 代码并返回纯文本?
【问题讨论】:
我正在尝试找到一种从字符串中去除 BBCode 的方法。我发现的模块(BBCode 和 Post Markup)似乎只将它们转换为 HTML,而不仅仅是删除 BBCode 并返回一个干净的字符串。如果我遗漏了一些东西,而其中一个实际上做了我要问的事情,我会喜欢它的一些方向:)
否则,有什么方法可以从字符串中去除 BB 代码并返回纯文本?
【问题讨论】:
您的答案实际上在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 标记,并在适当的地方拼接其余部分。
【讨论】:
根据您的需要,这可能就足够了:
#UNTESTED
import re
with open("some_input_file.txt") as input_file:
for s in input_file:
s = re.sub('\[.*?]','',s)
print s
【讨论】:
[code]a = [1, 2, 3, 4, 5][/code] 是有效的 BBCode,指定一个 <code></code> 块,但使用您的答案处理只会产生 a = 。