6

我的数据如下所示:

<value>v13772   @FBst0451145:w&lt;up&gt;1118&lt;/up&gt;; P{GD3649}v13772@
v13773  @FBst0451146:w&lt;up&gt;1118&lt;/up&gt;; P{GD3649}v13773@</value>

如何在 XPATH 中处理此字符串以提取任何和所有 @FBst####### 数字?

我知道 xpath 匹配()函数......但它只返回真或假。如果我想要匹配的字符串,那就不好了。我四处寻找,但找不到这个问题的令人满意的答案,这可能很常见。

谢谢!

4

4 回答 4

7

除了 Michael Kay 的好答案之外,如果您只想使用该replace()功能,请使用

replace(.,'.*?(@FBst\d+).*','$1')

结果是

@FBst0451145
@FBst0451146

如果您只想要上述结果中的数字,请使用

replace(replace(.,'.*?(@FBst\d+).*','$1'),
          '[^0-9]+', ' ')

这产生

 0451145 0451146
于 2012-08-02T05:40:55.227 回答
2

我假设您也可以使用 XQuery。FunctX模块中的get_matches()函数应该适合您。下载支持您的 XQuery 版本的文件。然后在您需要其功能时导入该模块。

import module namespace functx = "http://www.functx.com" at "functx-1.0-doc-2007-01.xq";

functx:get-matches(string-join(//text()),'xyz')
于 2012-08-01T20:44:59.113 回答
2

尝试

tokenize(value, '[^0-9]+')

它应该返回由非数字序列分隔的标记序列。

于 2012-08-01T22:31:13.980 回答
0

在 Dimitre 的帮助下,一个有效的正则表达式是:

replace(.,'.*?(@FBst\d+).*','$1 ','m')

尽管除非换行符分隔每个目标字符串,否则它不起作用,但现在它会起作用。

谢谢大家!

于 2012-08-03T17:28:28.787 回答