【问题标题】:Removing TAGS in a document删除文档中的 TAGS
【发布时间】:2012-08-28 02:45:34
【问题描述】:

我需要找到所有 .txt 格式的标签(SEC 备案)并从备案中删除。

好吧,作为Python的初学者,我使用以下代码查找标签,但是它返回None,None,...并且我不知道如何删除所有标签。我的问题是如何找到所有标签 <....> 并删除所有标签,以便文档包含除标签之外的所有内容。

import re
tags = [re.search(r'<.+>', line) for line in mylist]
#mylist is the filename opened by open(filename, 'rU').readlines()

感谢您的宝贵时间。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    使用这样的东西:

    re.sub(r'<[^>]+>', '', open(filename, 'r').read())
    

    您当前的代码正在为不包含尖括号标签的每一行获取None

    您可能想使用[^&gt;] 来确保它只匹配第一个>。

    【讨论】:

      【解决方案2】:
      re.sub(r'<.*?>', '', line)
      

      使用re.sub&lt;.*?&gt; 表达式

      【讨论】:

      • 我对正则表达式了解不多,但re.MULTILINE 的意义何在?没有任何 ^$ 标记。你的意思是re.DOTALL,允许标签内有换行符?
      【解决方案3】:

      好吧,对于初学者,您将需要一个不同的正则表达式。您拥有的将选择第一个''之间的所有内容所以字符串:

      I can type in <b>BOLD</b>
      

      会渲染比赛:

      粗体

      解决这个问题的方法是使用惰性运算符 this site 很好地解释了为什么应该使用

      <.>

      匹配 HTML 标签。最终,你应该替换,所以:

      re.sub(r'', '', line)

      不过,我怀疑您真正想要匹配的是标签之间的内容。这就是一个好的前瞻可以创造奇迹的地方!

      (?).+?(?=

      看起来很疯狂,但它很容易崩溃。让我们从你所知道的开始:

      .+?
      

      匹配任意长度的字符串。 ?意味着它将匹配可能的最短字符串。 (我们之前加的懒惰)

      (<?=...)
      

      是向后看。它从字面上看自己身后而不捕捉表情。

      (?=...)
      

      是一个前瞻。这与后视相同。然后用一点findall:

      re.findall(r'(?<=>).+?(?=<)', line);
      

      现在,您可以遍历数组并修剪掉留下的不必要的空格,并得到一些非常好的输出!或者,如果您真的想使用替代方法(我知道我会的):

      re.sub(r'\s*(?:</+?>\s*)+', ' ', line)
      

      \s*
      

      将匹配附加到标签的任意数量的空白,然后您可以将其替换为一个空格,从而减少那些通常因过度仔细标记而导致的令人不安的双倍和三倍空格。作为奖励,

      (?: ... ) 
      

      被称为非捕获组(它不会在结果中为您提供较小的子匹配项)。在这种情况下,对于您的目的而言,这并不是真正必要的,但是考虑组总是有用的东西,并且只捕获您需要的那些是一种很好的做法。在其末尾添加一个 + (就像我所做的那样),将捕获尽可能多的标签,因为它们彼此相邻,将它们消除到一个空间中。所以如果文件有

      This is <b> <i> overemphasized </b> </i>!
      

      你会得到

      This is overemphasized !
      

      而不是

      This is   overemphasized  !
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多