regex - XSLT - 正则表达式替换字符

标签 regex xml xslt

我有一个这样的示例 xsl,

<doc>
  <para>text . . .text</para>
  <para>text . . .text. . . . . .text</para>
</doc>

如您所见,xml 中有一些模式,例如 。 . . 我需要的是用 * 替换点之间存在的空间。所以输出应该是这样的,

<doc>
  <para>text .*.*.text</para>
  <para>text .*.*.text.*.*.*.*.*.text</para>
</doc>

我为此编写了以下 xslt,

<xsl:template match="text()">
        <xsl:analyze-string select="." regex="(\.)(&#x0020;)(\.)">
            <xsl:matching-substring>
                <xsl:value-of select="replace(.,regex-group(2),'*')"/>
            </xsl:matching-substring>
            <xsl:non-matching-substring>
                <xsl:value-of select="."/>
            </xsl:non-matching-substring>
        </xsl:analyze-string>
    </xsl:template>

但它消除了所有其他空间并给我以下结果,

<doc>
  <para>text .*. .text</para>
  <para>text .*. .text.*. .*. .*.text</para>
</doc>

如何修改我的 XSLT 以获得正确的输出..

最佳答案

我觉得

<xsl:template match="text()">
    <xsl:analyze-string select="." regex="(\.)( )(\.)( \.)*">
        <xsl:matching-substring>
            <xsl:value-of select="replace(., ' ','*')"/>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="."/>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

完成任务。正如 LukStorms 指出的那样,这可以简化为

<xsl:template match="text()">
    <xsl:analyze-string select="." regex="\.( \.)+">
        <xsl:matching-substring>
            <xsl:value-of select="replace(., ' ','*')"/>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="."/>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

关于regex - XSLT - 正则表达式替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163307/

相关文章:

XML 到 XSLT 模式不匹配

xml - 使用 XSLT 转换其中包含 < > 的 XML

xml - 为什么//后代也在这个 XSLT 模板中评估 sibling ?

xslt - 菊花链 xslt 是一种可接受的做法吗?

regex - AWK 如果在两行相似的行中没有找到模式,则打印找到模式的行

regex - 使用 perl 将 XML 转换为 JSON

c# - 从 Azure Blob 存储下载 xml 文件的内容

java - 正则表达式命令(删除除指定txt之外的所有内容)

python - python 中的连接正则表达式有时会失败

javascript - 奇怪的 JavaScript 正则表达式