提取 XML 标记之间的第一个十进制值

Extracting the first decimal value between XML tags

<value>1.1111/1.22222</value>

这里我只需要提取第一个值1.1111,它介于<value>1.1111/1.22222中的/之间.

谁能建议如何解决这个问题?

请注意,我正在尝试在使用 Perl 正则表达式语法的监视工具中进行这项工作,并且我正在 Notepad++ 中进行测试。

使用 and

//value/text()

shell 中的演示:

$ echo '<value>1.1111/1.22222</value>'| xmllint --xpath '//value/text()' - |
    cut -d '/' -f1

尝试以下 PCRE 正则表达式:

(?<=<value>)(\d+\.\d+)(?=\/)

Debuggex Demo(问题中有示例输入字符串)

要点:

  • (?<=\<value\>)背后 ((?<=...)) <value> 的积极面貌 – 即 <value> 在要匹配的输入字符串的下一部分之前
  • (\d+\.\d+) – 一个或多个 (+) 数字 (\d)、句点 (\.) 和一个或更多数字
  • (?=\/)前瞻 ((?=...)) / – 即 / 跟随

我确认它在 Notepad++ 中有效(根据对 sputnick 回答的评论)...

...,但实验表明 the lookbehind appears to be worthless in Notepad++(即没有区别,匹配由模式的其余部分执行):基本上, 您的里程可能会有所不同,请使用 Notepad++ 进行测试

作为 perl 正则表达式:

/<value>\K(?a:\d+\.\d+)(?=\/)/

但如果您的实际情况不支持 perl 的所有这些功能,您可能需要:

/(?<=<value>)([0-9]+\.[0-9]+)(?=\/)/