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

时间:2015-01-12 01:28:55

标签: regex xml perl notepad++ pcre

<value>1.1111/1.22222</value>

在这里,我需要仅提取 1.1111<value>/之间的第一个值1.1111/1.22222

有人可以建议如何解决这个问题吗?

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

3 个答案:

答案 0 :(得分:1)

使用

//value/text()

在shell中演示:

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

答案 1 :(得分:0)

作为perl regex:

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

但如果您的实际案例不支持perl的所有功能,您可能需要:

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

答案 2 :(得分:-1)

尝试以下PCRE正则表达式:

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

Regular expression visualization

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

关键点:

  • (?<=\<value\>) - 对(?<=) ... <value>)的正面看法,即<value>之前要匹配的输入字符串的下一部分
  • (\d+\.\d+) - 一个或多个(+)个数字(\d),句点(\.)和一个或多个数字形式的十进制数字再次
  • (?=\/) - 对(?=的正面看法提前) ... /) - 即 > /跟随

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

Confirmation in Notepad++

...,但实验显示 the lookbehind appears to be worthless in Notepad++ (即没有区别,匹配由模式的其余部分执行):基本上,你的里程可能会使用Notepad ++ 对此进行测试。