首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择数字前面的单词

选择数字前面的单词
EN

Stack Overflow用户
提问于 2014-05-20 06:42:36
回答 1查看 46关注 0票数 0

我有以下XML数据。

代码语言:javascript
复制
<para>The functions and duties of the CCS set out in s 6 CA are focused on promoting efficient market conduct and competitiveness of markets in Singapore. Consumer welfare, mentioned in the Singapore&#8211;US FTA, is not expressly mentioned as a purpose of the CA, nor is it expressly set out in the CA as an objective to be safeguarded by the CCS. However, CCS Guideline 1, at para 2.1 on &#8220;Purpose&#8221; of the CA makes reference to how consumers benefit as a consequence of competition. And this is equal to 2.1% of the entire data</para></footnote></para></item>

在这里,我想捕获数字后面的单词paraparasparas 1.2 and 0.8,但如果数据类似于general 1.2 and 1.3,则不应该捕获

我使用的正则表达式如下所示。

代码语言:javascript
复制
    <xsl:template match="text()">

    <xsl:analyze-string select="." regex="(([Cc]hapter)\s(\d+))">

        <xsl:matching-substring>
            <xsl:choose>
                <xsl:when test="number(regex-group(3)) &lt; number(9)">
                    <a href="{concat('er:#BGCL_CH_',format-number(number(regex-group(3)),'00'),'/','BGCL_CH_',format-number(number(regex-group(3)),'00'))}">
                        <xsl:value-of select="."/>
                    </a>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="."/>
                </xsl:otherwise>
            </xsl:choose>

        </xsl:matching-substring>

        <xsl:non-matching-substring>
            <xsl:analyze-string select="." regex="([0-9]+)\.([0-9]+)">

                  <xsl:matching-substring>
         <xsl:choose>
                                                                <xsl:when test="number(regex-group(1)) &lt; number(9)"> 
                                                                <a
          href="{concat('er:#CLI_CH_',format-number(number(regex-group(1)),'00'),'/P',format-number(number(regex-group(1)),'0'),'-',format-number(number(regex-group(2)),'000'))}">
          <xsl:value-of select="."/>
        </a>
        </xsl:when>
        <xsl:otherwise>
代码语言:javascript
复制
                    <xsl:analyze-string select="."  regex="http://[^ ]+">
                        <xsl:matching-substring>
                            <a href="{.}">
                                <xsl:value-of select="."/>
                            </a>

                        </xsl:matching-substring>
                        <xsl:non-matching-substring>

                            <xsl:value-of select="."/>
                        </xsl:non-matching-substring>
                    </xsl:analyze-string>
                </xsl:non-matching-substring>
            </xsl:analyze-string>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

但是在这里,它捕获的是x.y格式的任意数字,而且我只想捕获以下格式的文本

代码语言:javascript
复制
para x.y
paras x.y and x.y

我想将x.y转换成以下格式

代码语言:javascript
复制
er:#BGCL_CH_x/Px-y

请让我知道我该怎么做。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-20 08:31:45

试一试如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:template match="text()">
        <xsl:analyze-string select="." regex="paras\s([0-9]+)\.([0-9]+)\sand\s([0-9]+)\.([0-9]+)">
            <xsl:matching-substring>
                <xsl:choose>
                    <xsl:when test="number(regex-group(1)) &lt; number(9)">
                        <a
                            href="{concat('er:#CLI_CH_',format-number(number(regex-group(1)),'00'),'/P',format-number(number(regex-group(1)),'0'),'-',format-number(number(regex-group(2)),'000'))}">
                            <xsl:value-of select="substring-before(., ' and')"/>
                        </a>
                        <xsl:text> and </xsl:text>
                        <a
                            href="{concat('er:#CLI_CH_',format-number(number(regex-group(3)),'00'),'/P',format-number(number(regex-group(3)),'0'),'-',format-number(number(regex-group(4)),'000'))}">
                            <xsl:value-of select="substring-after(., 'and ')"/>
                        </a>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="."/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:matching-substring>
            <xsl:non-matching-substring>
                <xsl:analyze-string select="." regex="para\s([0-9]+)\.([0-9]+)">
                    <xsl:matching-substring>
                        <xsl:choose>
                            <xsl:when test="number(regex-group(1)) &lt; number(9)">
                                <a
                                    href="{concat('er:#CLI_CH_',format-number(number(regex-group(1)),'00'),'/P',format-number(number(regex-group(1)),'0'),'-',format-number(number(regex-group(2)),'000'))}">
                                    <xsl:value-of select="."></xsl:value-of>
                                </a>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:value-of select="."></xsl:value-of>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:matching-substring>
                    <xsl:non-matching-substring>
                        <xsl:value-of select="."/>
                    </xsl:non-matching-substring>
                </xsl:analyze-string>
            </xsl:non-matching-substring>
        </xsl:analyze-string>
    </xsl:template>

</xsl:stylesheet>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23752660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档