Regex 动态正则表达式,用于根据字符数匹配字符串,但不拆分字符串

Regex 动态正则表达式,用于根据字符数匹配字符串,但不拆分字符串,regex,xml,xslt,Regex,Xml,Xslt,请帮我解决我的问题。我需要创建一个动态正则表达式来匹配字符串,并将其拆分为若干个字符,但不应拆分任何单词。字符数可以是10、12或15。 我使用xslt作为我的核心,并且只在这个场景中使用正则表达式。因为据我所知,xslt不能做到这一点 在将正则表达式纳入xslt代码之前,我一直在进行正则表达式测试 我的xslt代码是: <xsl:variable name="NumOfChar" select="[NumOfCol]"/> <xsl:choose> <xsl

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


最新国际新闻

输出:(10个字符)


最新的
国际的
消息

输入:(15个字符)


全面的最新新闻报道

输出:(15个字符)


综合的
最新消息
新闻报道


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

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

除长单词外,它分成10个字符的组

编辑

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


((?您可以使用此模板结构拆分字符串:

不过,它是XSLT1.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>


我想你到底在问什么有点不清楚。你能给出10个字符和15个字符示例的实际输出和期望输出吗。谢谢
应该代表什么?我不认为
[NumOfCol]
将编译。或者您使用哪个XSLT版本和哪个XSLT处理器?@Damo所需的输出已发布在上面。输出:(10个字符)和输出:(15个字符)@MartinHonnen将从xml输入中提取列数。变量numochar将根据输入xml上的标记确定。我正在使用XSLT 2.0,我正在使用editix进行测试。也许可以尝试使用澄清和示例更新您的问题,而不是将它们留在注释中。这将使问题成为一个完整的问题t更清楚,人们不必阅读所有的评论来理解您的要求。另一个帮助@Damo。如果这个表达式需要动态,意味着分组可以是10个字符、15个字符或20个字符?非常感谢您的欢迎。恐怕我不知道如何将变量从xslt模板传递到r可能这需要一个新的问题来解决堆栈溢出?如果表达式需要是动态的,该怎么办?这意味着分组可以是10个字符、15个字符或20个字符@Damo@hulikabalbon:应使用字符长度作为parameter@Damo\b单词边界的替代语法是什么?因为XSLT 2.0 Saxon 9不支持它:(这将只捕获前15个字符。对。您需要使用问题中/给定的所需参数值调用模板。但这将拆分一个单词:(
<p>
    <text>The latest</text>
    <text>international</text>
    <text>news</text>
</p>
<p>
    <text>Comprehensive up-to-date news coverage</text>
</p>
<p>
    <text>Comprehensive</text>
    <text>up-to-date news</text>
    <text>coverage</text>
</p>
<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>