正则表达式使用 xslt 匹配某些元素文本

Posted

技术标签:

【中文标题】正则表达式使用 xslt 匹配某些元素文本【英文标题】:Regex to match some element text using xslt 【发布时间】:2021-03-30 10:46:36 【问题描述】:

我正在将 html 内容转换为 xml。我的情况符合以下情况。

<div class="subs1">               (               <i>                l               </i>               ) “Sovereign lands” means the</div>

我尝试了下面的表达式

div[@class='subs1'][matches(.,'^&#x0a;*\s*\(\s*<i>i</i>\s*\)')]

但这不起作用。请有人帮助我

【问题讨论】:

【参考方案1】:

您正在尝试匹配 '&lt;i&gt;',但 '&lt;i&gt;' 不是元素文本的一部分。 &lt;i&gt; 是一个子元素。

我在match().&lt;div&gt; 运行时得到的字符串部分加了下划线:

<div class="subs1">  (  <i>  l  </i>  ) “Sovereign lands” means the</div>
                   _____   _____    _______________________________

如果您想确保有一个包含特定内容的 &lt;i&gt; 子级,那么您需要单独检查。

div[@class='subs1' and matches(.,'^&#x0a;*\s*\(\s*i\s*\)') and i[matches(., 'i')]]

【讨论】:

我需要匹配包含 元素的右大括号 ( l ) @Reegan 也许我不够清楚。 您无法匹配 &lt;i&gt; 元素。 您共享的内容适用于 div[@class='subs1' and matches(.,'^ *\s*(\s*i\s*)'),但是“and i[matches(., 'i')]”不起作用。它显示为假,我无法选择这样的场景 @Reegan 好吧,选择一个与您的&lt;i&gt; 内容实际匹配的正则表达式。在您的示例 XML 中,&lt;i&gt; 包含一个小“L”,当前的正则表达式无法匹配。 感谢 Tomalak,我使用了这个正则表达式 div[@class='subs1'][matches(.,'^ *\s*(\s*i\s*)' )] 和 i[matches(normalize-space(.), 'l')] 仍然显示错误

以上是关于正则表达式使用 xslt 匹配某些元素文本的主要内容,如果未能解决你的问题,请参考以下文章

仅当两者之间存在某些文本时,正则表达式才匹配星号

XSLT 是不是提供了一种通过使用正则表达式来识别 xml 元素的方法?

GLib 正则表达式匹配在特定匹配和模式上给出分段错误

awk-模式匹配

正则表达式踩坑

正则表达式及grep