<value>1.1111/1.22222</value>
在这里,我需要仅提取 1.1111
与<value>
中/
之间的第一个值1.1111/1.22222
。
有人可以建议如何解决这个问题吗?
请注意,我正在尝试在使用Perl正则表达式语法的监视工具中完成此工作,我正在使用Notepad ++进行测试。
答案 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+)(?=\/)
Debuggex Demo(问题中带有示例输入字符串)
关键点:
(?<=\<value\>)
- 对(?<=
()
... <value>
)的正面看法,即<value>
之前要匹配的输入字符串的下一部分(\d+\.\d+)
- 一个或多个(+
)个数字(\d
),句点(\.
)和一个或多个数字形式的十进制数字再次(?=\/)
- 对(?=
的正面看法提前()
... /
) - 即 > /
跟随我确认它在Notepad ++中有效(根据对sputnick的回答)...
...,但实验显示 the lookbehind appears to be worthless in Notepad++ (即没有区别,匹配由模式的其余部分执行):基本上,你的里程可能会使用Notepad ++ 对此进行测试。