【问题标题】:Regular expressions, xslt 2, basics正则表达式,xslt 2,基础
【发布时间】:2018-08-23 15:35:39
【问题描述】:

我浏览了几个示例并尝试修改我的搜索以了解什么是什么。

输入:

<Description>Ottelu pelattu 22.4.2018. Gagarin Cupin 5. finaaliottelu. Selostus: Antti Mäkinen.</Description>
<Description>Ottelu pelattu 20.4.2018. Gagarin Cupin 1. finaaliottelu. Selostus: Antti Mäkinen.</Description>
<Description>Ottelu pelattu 22.4.2018. Gagarin Cupin 2. puolivälierä. Selostus: Antti Mäkinen.</Description>`

我想要做的是选择这些到我的输出:

  • “加加林库宾 5.finaaliottelu”
  • “加加林库宾 2. puolivälierä”

中间没有点。

我可以使用 substring-before/after,但我知道使用正则表达式可能有用吗?

我做了这个来获取我需要的东西:Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*

但是现在我如何在 XSLT 中使用它呢?我应该使用analyze-string() 吗?还是matches()

XSLT:

<xsl:variable name="episode" select="Description"/>
<xsl:variable name="fetchcup">
                <xsl:analyze-string select="$episode" regex="Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*">
                    <xsl:matching-substring>
                        <xsl:value-of select="regex-group(1)"/>
                    </xsl:matching-substring>
                </xsl:analyze-string>
           </xsl:variable>
<Cup><xsl:value-of select="$fetchcup"/></Cup>

但老实说,尽管浏览了教程页面和示例,但我觉得我缺少一些关于它如何工作的基础知识。如果我踏进门,我可以进一步应用它。

【问题讨论】:

  • 考虑向我们展示一些最小但完整的输入示例和 XSLT 以演示问题,以及您想要的输出和您获得的输出。目前尚不清楚您是否将这些 Description 元素作为公共父元素的同级元素,然后您是否在与父元素匹配的模板中拥有 &lt;xsl:variable name="episode" select="Description"/&gt; 并选择所有 Description 元素并期望使用analyze-string 同时在所有这些上。

标签: regex xslt-2.0 regex-group


【解决方案1】:

您的正则表达式在单个 Description 元素的上下文中工作,如果您想输出匹配的字符串,您可以简单地将 . 用于上下文项或 regex-group(0)(参见 @ 987654321@)。在您的情况下使用 regex-group(1) 没有意义,因为您的正则表达式没有任何子表达式。

  <xsl:template match="Description">
      <cup>
                <xsl:analyze-string select="." regex="Gagarin Cupin\s\d\W\s\w*[a-zA-ZäöüÄÖÜß]*">
                    <xsl:matching-substring>
                        <xsl:value-of select="."/>
                    </xsl:matching-substring>
                </xsl:analyze-string>          
      </cup>
  </xsl:template>

https://xsltfiddle.liberty-development.net/nc4NzQH 中的那个模板输出

<cup>Gagarin Cupin 5. finaaliottelu</cup>
<cup>Gagarin Cupin 1. finaaliottelu</cup>
<cup>Gagarin Cupin 2. puolivälierä</cup>

对于您的三个 Description 元素,我希望我正确理解为所需的输出。

【讨论】:

  • 请注意,该模式可以简化,因为我认为在您的控制下,\w 字符类已经包含 unicode 字母:Gagarin Cupin\s+\d+\.\s+\w+Gagarin Cupin \d+\. \w+。不管怎样,感谢让我发现存在一个 xslt 小提琴。
  • @CasimiretHippolyte,感谢您指出这一点,感谢您或创建xsltfiddle.liberty-development.net/nc4NzQH/1 以证明它有效的人。
  • 感谢您帮助我。这解决了我的问题。我学会了如何指定正则表达式组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多