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 matches() 関数は知っていますが、それは true または false しか返しません。一致する文字列が必要な場合はダメです。私は周りを検索しましたが、おそらく本当に一般的なこの問題に対する満足のいく答えを見つけることができません.

ありがとう!

4

4 に答える 4

7

replace()Michael Kayによる良い答えに加えて、関数のみを使用したい場合は、次を使用してください。

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 に答える