如何在数字后使用正则表达式输入字符

时间:2019-10-18 07:32:29

标签: xslt

我要选择@reId,其后跟数字(fig-FigF.3A)。

输入:

<p type="TOC_Level Two Entry">
  <doclink refType="anchor" refId="fig-FigF.3A">Figure F.3A—Text<c
      type="TOC_Leader Dots"><t/></tps:c></tps:doclink>
  <ref format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/>
<p>

输出应为:

<p type="TOC_Level Two Entry"><doclink refType="anchor" 
  refId="fig-FigF.3A">F.3A<tps:t/>Text<c 
  type="TOC_Leader Dots"><t/></c></tps:doclink><ref
   format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/></tps:p>

尝试的代码:

我尝试使用此正则表达式^(Figure )(\d+|[A-Z].\d+)(—)(.*)解决此问题。但这不起作用。

我该如何解决?我正在使用xslt 2.0

2 个答案:

答案 0 :(得分:1)

因此,尝试从中提取明确的需求陈述,看来您希望输入“ fig-FigF.3A”产生输出“ F.3A”。或者,也许您想将“图F.3A-文本”视为输入?一方面,您说您正在选择@reId属性-该属性在您的输入中不存在;另一方面,您尝试的解决方案是寻找出现在文本节点中而不是属性中的文本“ Figure”。

所以我认为我们需要更清晰的要求声明。

将其作为需求陈述的另一个问题是您仅给出一个示例,而不是一般规则。您的问题中有一条一般规则的提示“该字符后面有一个数字”。但是,这是什么意思?您的示例似乎正在寻找字母点数字模式,这根本与您对问题的描述不符。

对不起,SO主持人,这不是答案,而是对问题的评论。它开始只是一个答案,直到我意识到这个问题还不清楚,但是那时评论太久了。

答案 1 :(得分:1)

Ist格式不正确的输入plz检查

如果只想更改文本,则将此代码与替换功能一起使用:

输入:

    <?xml version="1.0" encoding="UTF-8"?>
<p type="TOC_Level Two Entry">
<tps:doclink refType="anchor" refId="fig-FigF.3A" xmlns:tps="htttp:\\tps">Figure F.3A—Text<tps:c type="TOC_Leader Dots"><t/></tps:c></tps:doclink>
<ref format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/>
</p>

代码:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="xml" omit-xml-declaration="no"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="text()">
        <xsl:value-of select="replace(., '(Figure )([A-Z])([.])([0-9A-Z]+)(.+?)([A-Za-z]+)', '$2$3$4')"/>
    </xsl:template>

</xsl:stylesheet>

输出:

    <?xml version="1.0" encoding="UTF-8"?>
<p type="TOC_Level Two Entry">
<tps:doclink xmlns:tps="htttp:\\tps" refType="anchor" refId="fig-FigF.3A">F.3B<tps:c type="TOC_Leader Dots"><t/></tps:c></tps:doclink>
<ref format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/>
</p>

演示: https://xsltfiddle.liberty-development.net/ncntCS9/1