代码之家  ›  专栏  ›  技术社区  ›  Pietro Maria Liuzzo

正则表达式组XSLT 2.0的string-length()

  •  0
  • Pietro Maria Liuzzo  · 技术社区  · 11 年前

    我有一个包含如下文本的文件

    text+++text++text+text

    我想用一个元素替换+++,该元素考虑到每个组的+数。 我用过这个xslt

    ...
    <xsl:analyze-string select="." regex="(\+)+">
    <xsl:matching-substring>
    <gap reason="illegible" quantity="{string-length(regex-group(1))}" unit="character"/>
    </xsl:matching-substring>
    </xsl:analyze-string>
    ...
    

    我的预期结果是

    text <gap reason="illegible" quantity="3" unit="character"/> text <gap
    reason="illegible" quantity="2" unit="character"/> text <gap
    reason="illegible" quantity="1" unit="character"/> text
    

    但显然我的正则表达式总是只匹配一个,我得到了这样的结果:

    text <gap reason="illegible" quantity="1" unit="character"/> text <gap
    reason="illegible" quantity="1" unit="character"/> text <gap
    reason="illegible" quantity="1" unit="character"/> text
    

    非常感谢您的建议。

    2 回复  |  直到 11 年前
        1
  •  0
  •   Martin Honnen    11 年前

    使用 regex="(\++)" 以确保整个字符串组成组。

        2
  •  0
  •   Sabuj Hassan    11 年前

    正则表达式通常用于匹配连续的 + 性格很好。但你只选了组中的一个角色 () 这就是为什么你总是 quantity="1" 匹配。

    因此,将正则表达式更改为以下表达式:

    ([+]+)