使用 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."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/