Use:
tokenize(hl7:CE.1, '\^')[1]
Here is a simple XSLT 2.0 - based verification:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="OBX.6">
<xsl:sequence select="tokenize(CE.1, '\^')[1]"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
when this transformation is applied on the following XML document (derived from the provided XML fragment and made well-formed):
<t>
<OBX.5>38.0</OBX.5>
<OBX.6>
<CE.1>%^%</CE.1>
</OBX.6>
</t>
the wanted, correct result is produced:
%