提取 XML 标记之间的第一个十进制值
Extracting the first decimal value between XML tags
<value>1.1111/1.22222</value>
这里我只需要提取第一个值1.1111
,它介于<value>
和1.1111/1.22222
中的/
之间.
谁能建议如何解决这个问题?
请注意,我正在尝试在使用 Perl 正则表达式语法的监视工具中进行这项工作,并且我正在 Notepad++ 中进行测试。
//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]+)(?=\/)/
<value>1.1111/1.22222</value>
这里我只需要提取第一个值1.1111
,它介于<value>
和1.1111/1.22222
中的/
之间.
谁能建议如何解决这个问题?
请注意,我正在尝试在使用 Perl 正则表达式语法的监视工具中进行这项工作,并且我正在 Notepad++ 中进行测试。
//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]+)(?=\/)/