【问题标题】:Strip BBCode from string从字符串中去除 BBCode
【发布时间】:2015-08-09 04:33:14
【问题描述】:

我正在尝试找到一种从字符串中去除 BBCode 的方法。我发现的模块(BBCode 和 Post Markup)似乎只将它们转换为 HTML,而不仅仅是删除 BBCode 并返回一个干净的字符串。如果我遗漏了一些东西,而其中一个实际上做了我要问的事情,我会喜欢它的一些方向:)

否则,有什么方法可以从字符串中去除 BB 代码并返回纯文本?

【问题讨论】:

    标签: python bbcode


    【解决方案1】:

    您的答案实际上在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ᵩ 基于正则表达式的answerpostmarkup 都存在同样的问题——无法区分 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 标记,并在适当的地方拼接其余部分。

    【讨论】:

      【解决方案2】:

      根据您的需要,这可能就足够了:

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

      【讨论】:

      • 这会去掉 所有 方括号及其内容,不过……如果你有嵌入的代码、某些表情符号或其他东西,那就不好了。
      • 我认为这就是 OP 所要求的——“只需删除 BBCode 并返回一个干净的字符串”。
      • 对不起,我本来可以更清楚的。我的意思是嵌入式 computer 代码。例如,[code]a = [1, 2, 3, 4, 5][/code] 是有效的 BBCode,指定一个 <code></code> 块,但使用您的答案处理只会产生 a =
      • 或者,你可以有这样的假设:“我很难过:[但是,吃冰淇淋让我振作起来!:]
      • 谢谢 - 这非常适合我的目标。它用于从 API 解析工作票 - 所以不应该有任何 :[ 或 :] 面孔,或者真的 [] 根本不用于任何东西,除了 bbcode :D 你太棒了!如果我有更多的代表,我可以在这里给你投票:(
      猜你喜欢
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2013-09-23
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多