根据范围与字母匹配案例

match cases based on range with alphabets

我有以下XML。

<para>39B</para>
<para>76</para>

在这里我可以匹配到确切的数字,但是当有如下提到的范围时,问题就出现了。

if the range 39A-39P
  print case1
if the range 72-85
  print case2

我试过的代码

  <xsl:template match="text()">
    <xsl:analyze-string select="." regex="([\w]+)">
      <xsl:matching-substring>
        <xsl:variable name="regex1">
          <xsl:choose>
            <xsl:when test="contains(regex-group(1), '^39[A-P]$')">
              <xsl:text>CAse 1</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <xsl:text>Case 2</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
        <xsl:value-of select = "$regex1"/>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:value-of select="."/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:template>

请告诉我如何解决这个问题。

谢谢

对于 XSLT 2.0,您可以使用正则表达式,因此对于字母数字大小写,您可以使用

<xsl:template match="para[matches(., '^39[A-P]$')]">case1</xsl:template>

以及第二种情况的简单数字比较

<xsl:template match="para[. ge 72 and . le 85]">case2</xsl:template>