我正在尝试查找不在XML标记内的所有文本:
<transcript>
<text start="9.75" dur="5.94">welcome to about my property here you
can learn more about how your property</text>
<text start="15.69" dur="4.71">was assessed see the information impact
has on file and compare your property to</text>
<text start="20.4" dur="1.3">others in your neighborhood</text>
<text start="21.7" dur="5.32">interested in learning about market
trends in your municipality no problem</text>
<text start="105.79" dur="6.23">I have all of this and more about life property
. see your property assessment know more</text>
<text start="112.02" dur="0.11">about</text>
</transcript>
我正在使用以下正则表达式模式,但显然它不正确,因为它抓取了开始和结束<transcript>
标记之间的所有文本:
<transcript>[\s\S]*?<\/transcript>
如何修改此正则表达式模式以仅选择不在任何标记标记内的文本?
答案 0 :(得分:1)
使用XSLT。 XSLT是一种专门设计用于将XML转换为另一种输出格式的语言(再次返回到有效的XML,或其他类似的东西,如(X)HTML,纯文本或任何其他格式 - 但最好是基于纯文本)。
在这种情况下,最小的XSLT就是这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0" >
<xsl:output method="text" indent="no" />
<xsl:template match="text">
<!-- do NOTHING here! -->
</xsl:template>
</xsl:stylesheet>
这是有效的,因为处理单个XML标记的默认值是递归地将模板匹配应用于其包含的标记,并且将始终复制纯文本。 <template>
中唯一的标记是<text>
,您可以通过执行'无'来处理它 - 即,通过而不是将其内容复制到输出中。该模板中的行只是一个注释。
XML术语中的所有其他“节点”都是那些没有周围标记的节点,因此 被复制到输出中。
或者,如果您的标记类型不仅仅是<text>
元素,并且您想要跳过所有标记,请将模板应用于/
和transcript
以处理每个标记并应用另一个*
(将选择未在其他地方指定的所有剩余标签)不处理它们:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0" >
<xsl:output method="text" indent="no" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="transcript">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="*">
<!-- do NOTHING here! -->
</xsl:template>
</xsl:stylesheet>
同样,简单的无标记文本将会通过而不会被处理,因此它们的内容将被复制到输出中。
两个XSLT样式表只会输出I ha
,这是示例文本中唯一未被标记包围的部分。
答案 1 :(得分:0)
你想找到
吗?welcome to about my property here you can learn more about how your property
这
<text start="9.75" dur="5.94">welcome to about my property here you can learn more about how your property</text>
...
它会起作用。
(?<=>).+?(?=<)