Для этого вам не нужна реальная возможность RegEx, и проблему можно легко решить в чистом XSLT 1.0:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"n/text()[floor(.) = . and starts-with(., '00')]">
<xsl:value-of select="concat('2', substring(.,2))"/>
</xsl:template>
<xsl:template match="n[not(floor(.) = .)]"/>
</xsl:stylesheet>
Когда это преобразование применяется кследующий XML-документ :
<t>
<n>2322</n>
<n>232dasdf2</n>
<n>0014</n>
</t>
желаемый, правильный результат получается :
<t>
<n>2322</n>
<n>2014</n>
</t>