As simple as this:
I. XSLT 2.0 solution:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<ol>
<xsl:apply-templates/>
</ol>
</xsl:template>
<xsl:template match="P[matches(., '(^\(\d+\)\s*)(.*)')]">
<li>
<xsl:analyze-string select="." regex="(^\(\d+\)\s*)(.*)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(2)"/>
</xsl:matching-substring>
</xsl:analyze-string>
</li>
</xsl:template>
</xsl:stylesheet>
When this transformation is applied on the provided XML document:
<Content>
<P>(1) blah</P>
<P>(2) blah</P>
<P>(2) blah</P>
</Content>
the wanted, correct result is produced:
<ol>
<li>blah</li>
<li>blah</li>
<li>blah</li>
</ol>
II. XSLT 1.0 solution:
<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="/*">
<ol>
<xsl:apply-templates/>
</ol>
</xsl:template>
<xsl:template match=
"P[starts-with(.,'(')
and
floor(substring-before(substring(.,2), ')'))
=
substring-before(substring(.,2), ')')
]">
<li>
<xsl:value-of select="substring-after(., ') ')"/>
</li>
</xsl:template>
</xsl:stylesheet>
when this transformation is applied on the same XML document (above), the same correct result is produced:
<ol>
<li>blah</li>
<li>blah</li>
<li>blah</li>
</ol>