动态正则表达式可根据多个字符来匹配字符串,但不会拆分字符串

时间:2019-01-08 11:48:24

标签: regex xml xslt

请帮助我解决问题。我需要创建一个动态正则表达式来匹配一个字符串,并用多个字符将它们分开,但不应分开任何单词。字符数可以是10或12或15。 我使用xslt作为我的核心,并且仅在这种情况下使用正则表达式。因为据我所知xslt无法做到这一点。

在将其合并到我的xslt代码中之前,我一直在进行正则表达式测试。

我的xslt代码是:

<xsl:variable name="NumOfChar" select="[NumOfCol]"/>

<xsl:choose>
  <xsl:when test="$NumOfCol = 10">
    <xsl:value-of select="[regex here]"/>
  </xsl:when>
  <xsl:when test="$NumOfCol = 15">
    <xsl:value-of select="[regex here]"/>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="[regex here]"/>
  </xsl:otherwise>
</xsl:choose>

我尝试了很多正则表达式,但目前我专注于此表达式:

\ b。{1,10}

,但问题是它不能捕获10个或更多字符的单词。它将分裂。

输入:(10个字符)

<p>
    <text>The latest international news</text>
</p>

输出:(10个字符)

<p>
    <text>The latest</text>
    <text>international</text>
    <text>news</text>
</p>

输入:(15个字符)

<p>
    <text>Comprehensive up-to-date news coverage</text>
</p>

输出:(15个字符)

<p>
    <text>Comprehensive</text>
    <text>up-to-date news</text>
    <text>coverage</text>
</p>

2 个答案:

答案 0 :(得分:0)

我几乎不了解xslt,但是下面的正则表达式看起来像您所需要的。

\b.{1,10}\b|\b\S+\b,您可以测试here

除长字外,它分为10个字符的组。

编辑

根据更多的对话和对规范的更改,以下正则表达式使用后视和前视而不是单词边界将允许按要求在匹配项中包含特殊字符。

((?<=\s)|^).{1,10}((?<=\s)|$)|((?<=\s)|^)\S+((?=\s)|$) demo here

答案 1 :(得分:-1)

您可以使用此模板结构分割字符串:

尽管它是XSLT 1.0样式,并且它也不会检查分割的字符串是否是单词。

您可以共享有关源的更多详细信息,以便将regex与xslt集成在一起并获得更准确的结果

<xsl:call-template name="splitSequence">
    <xsl:with-param name="input" select="your xpath to grab the string"/>
    <xsl:with-param name="length" select="'15'"/>
</xsl:call-template>

<xsl:template name="splitSequence">
    <xsl:param name="input" />
    <xsl:param name="length" />
    <xsl:value-of select="substring($input,1,$length)" /><xsl:value-of select="$newLine" />
    <xsl:if test="substring($input,$length+1)">
        <xsl:call-template name="splitSequence">
            <xsl:with-param name="input" select="substring($input,$length+1)" />
        </xsl:call-template>
    </xsl:if>
</xsl:template>