regex - 删除标签之外的文本

标签 regex vim tags

使用 vim,我尝试删除 <text> 外部的所有文本 block 。这需要跨越换行符和其他(不相关)标签。

我尝试使用正则表达式来替换换行符的文本,但由于几个原因而失败,其中之一是我的尝试没有跨越多行,并且我需要让我的匹配是非贪婪的。 (这是使用{-}以某种方式完成的吗?)

应该匹配我想要删除的内容的正则表达式如下:<//text>.*<text.*>但如果我让这场比赛变得非贪婪,我可能会遇到其他问题。 (我还意识到,在开始执行此操作时,我将需要清理一个部分标记部分。)

我是否应该采取另一种方法,或者有人可以指导我使用 vim 删除此类标签之间的所有内容?

编辑:包括示例文本

<contributor>
        <username>MalafayaBot</username>
        <id>628</id>
      </contributor>
      <minor />
      <comment>Robô: A modificar Categoria:Vocábulo de étimo latino (Português) para Categoria:Entrada de étimo latino (Português)</comment>
      <text xml:space="preserve">={{-pt-}}=
==Substantivo==
{{flex.pt|ms=excerto|mp=excertos}}
{{paroxítona|ex|cer|to}} {{m}}
# [[extrato]] de um [[texto]], [[fragmento]]
#: ''A seguir, um '''excerto''' do texto original.''

===Tradução===
{{tradini}}
* {{trad|es|extracto}}
* {{trad|fr|extrait}}
{{tradmeio}}
* {{trad|en|excerpt}}
{{tradfim}}

=={{etimologia|pt}}==
:Do latim ''[[excerptu]]'' (colhido de).

=={{pronúncia|pt}}==
===Brasil===
* [[SAMPA]]: /e.&quot;sEx.tu/
* [[AFI]]: /esˈertu/
[[zh:excerto]]</text>
      <sha1>8i1zywj37s74ah4wnai11ohorfjn8j5</sha1>
      <model>wikitext</model>

最佳答案

您在正则表达式方面遇到的困难表明您使用了错误的工具来完成这项工作。

对于从 XML 中提取文本,您可以使用 XSLT,它比正则表达式更好地处理所有特殊情况。或者使用专用工具,例如 xidel ,一种用于 XML 的 grep。有了它,提取就像这样简单:

xidel --extract "//text" input.xml

关于regex - 删除标签之外的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16721360/

相关文章:

php - 删除 PHP 字符串中的所有不匹配字符?

regex - 如何为多个目录创建 htaccess 重定向

grails - Groovy中Ascii到Int函数

vim-go 自动补全不工作

javascript - JavaScript 中的 Struts 标签

java - 有没有办法在 Eclipse 中调试 JSP 自定义标签?

python - 将 XML 文件中的所有 <img> 标签替换为一个单词

正则表达式,分组,查找最后一个匹配项

vim - 让 Vim 仅在插入模式下使用 Dvorak 键绑定(bind)?

regex - 仅在找到匹配的行中替换