首页 > 解决方案 > 动态正则表达式基于多个字符匹配字符串但不拆分字符串

问题描述

请帮我解决我的问题。我需要创建一个动态正则表达式来匹配一个字符串并将它们拆分为多个字符,但不应拆分任何单词。字符数可以是 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>

标签: regexxmlxslt

解决方案


我对 xslt 几乎一无所知,但下面的正则表达式看起来像你需要的。

\b.{1,10}\b|\b\S+\b你可以在这里测试

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

编辑

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

((?<=\s)|^).{1,10}((?<=\s)|$)|((?<=\s)|^)\S+((?=\s)|$) 演示在这里


推荐阅读