【问题标题】:How to remove tags from a string in python using regular expressions? (NOT in HTML)如何使用正则表达式从python中的字符串中删除标签? (不在 HTML 中)
【发布时间】:2011-04-09 09:28:52
【问题描述】:

我需要从 python 中的字符串中删除标签。

<FNT name="Century Schoolbook" size="22">Title</FNT>

去除两端的整个标签,只留下“标题”的最有效方法是什么?我只看到了使用 HTML 标记执行此操作的方法,而这在 python 中对我不起作用。我特别将它用于 ArcMap,一个 GIS 程序。它的布局元素有自己的标签,我只需要删除两个特定标题文本元素的标签。我相信正则表达式应该可以很好地解决这个问题,但我愿意接受任何其他建议。

【问题讨论】:

  • 你希望 Title 完成后是 Title,还是 Title 或 Title 或? ,从你的问题中不确定你在追求什么?
  • 那么这个字符串在处理后应该是什么样子呢?我不太清楚你想做什么。
  • 对不起。处理后字符串应为“Title”。
  • 作为 html 的兄弟,xml 并不比 html 更规则或上下文无关。我不确定您的情况的全部范围,但快速浏览一下,正则表达式看起来仍然是适合这项工作的错误工具。

标签: python strip arcmap


【解决方案1】:

如果只是用于解析和检索值,你可以看看 BeautifulStoneSoup。

【讨论】:

    【解决方案2】:

    这应该可行:

    import re
    re.sub('<[^>]*>', '', mystring)
    

    对于所有说正则表达式不是该工作的正确工具的人:

    问题的背景是所有关于常规/无上下文语言的反对意见都是无效的。他的语言基本上由三个实体组成:a = &lt;b = &gt;c = [^&gt;&lt;]+。他想删除任何出现的acb。这相当直接地将他的问题描述为一个涉及上下文无关语法的问题,并且将其描述为一个常规问题并不难。

    我知道每个人都喜欢“你不能用正则表达式解析 HTML”的答案,但是 OP 不想解析它,他只想执行一个简单的转换。

    【讨论】:

    • 这不起作用。它返回了原始字符串。不过谢谢
    • 抱歉,我忘记了最重要的 * 字符。再试一次?
    • 谢谢,这正是我所需要的。
    【解决方案3】:

    搜索此正则表达式并将其替换为空字符串应该可以。

    /<[A-Za-z\/][^>]*>/
    

    示例(来自 python shell):

    >>> import re
    >>> my_string = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
    >>> print re.sub('<[A-Za-z\/][^>]*>', '', my_string)
    Title
    

    【讨论】:

    • 那也没用。你能给我一个例子来说明你将如何使用它进行搜索和替换吗?我试过了,它返回了原始字符串。
    • 添加了一个例子。你忘了import re吗?
    【解决方案4】:

    如果源文本是格式良好的XML,可以使用stdlib模块ElementTree

    import xml.etree.ElementTree as ET
    mystring = """<FNT name="Century Schoolbook" size="22">Title</FNT>"""
    element = ET.XML(mystring)
    print element.text  # 'Title'
    

    如果来源格式不正确,BeautifulSoup 是一个不错的建议。正如几位发帖者指出的那样,使用正则表达式来解析标签并不是一个好主意。

    【讨论】:

    • 如果 FNT 将在“标题”中间包含另一个标签,则只会打印到内部标签的部分。
    【解决方案5】:

    使用 XML 解析器,例如 ElementTree。正则表达式不是这项工作的正确工具。

    【讨论】:

    • 除非不能保证输入是格式良好的 XML,在这种情况下,正则表达式可以说是唯一适合这项工作的工具。我还敢打赌,正则表达式的执行速度比将字符串作为 XML 文档处理要快得多。
    • 如果输入不是格式良好的 XML,那么实现完整的解析器将是执行此操作的正确方法。语法很复杂,正则表达式不够用。
    【解决方案6】:

    请避免使用正则表达式。尽管正则表达式可以处理你的简单字符串,但如果你得到一个复杂的字符串,你将来会遇到问题。

    您可以使用 BeautifulSoup get_text() 功能。

    from bs4 import BeautifulSoup
    
    text = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
    soup = BeautifulSoup(text)
    
    print(soup.get_text())
    

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多