我的数据如下:
<value>v13772 @FBst0451145:w<up>1118</up>; P{GD3649}v13772@
v13773 @FBst0451146:w<up>1118</up>; P{GD3649}v13773@</value>
如何在XPATH中处理此字符串以提取任何和所有@FBst #######数字?
我知道xpath matches()函数...但只返回true或false。如果我想要匹配的字符串,那就不好了。我已经四处寻找,但找不到这个问题的满意答案,这可能很常见。
谢谢!
答案 0 :(得分:7)
除了Michael Kay的好答案之外,如果您只想使用replace()
功能,请使用:
replace(.,'.*?(@FBst\d+).*','$1')
结果是:
@FBst0451145
@FBst0451146
如果您只想要上述结果中的数字,请使用:
replace(replace(.,'.*?(@FBst\d+).*','$1'),
'[^0-9]+', ' ')
生成:
0451145 0451146
答案 1 :(得分:2)
尝试
tokenize(value, '[^0-9]+')
应该返回由非数字序列分隔的标记序列。
答案 2 :(得分:1)
我假设您也可以使用XQuery。 get_matches()模块中的FunctX函数应该适合您。 Download支持您的XQuery版本的文件。然后在需要其功能时导入模块。
import module namespace functx = "http://www.functx.com" at "functx-1.0-doc-2007-01.xq";
functx:get-matches(string-join(//text()),'xyz')
答案 3 :(得分:0)
在Dimitre的帮助下,正常工作的正则表达式是:
replace(.,'.*?(@FBst\d+).*','$1 ','m')
虽然除非换行符分隔每个目标字符串,否则它不起作用,但现在就可以了。
谢谢大家!