[英]SPARQL string RANGE
我試圖通過使用索引號提取字符串的一部分。 當有
"OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..."
我需要從5:10 (FHWOIE)
字符串我發現它不可能通過REGEX,因為它只返回布爾而不是組。 但是,我沒有設法通過位置找到字符串上的區域選擇。 現在我想知道是否有?
我發現部分可能通過......
BIND(REPLACE(?sequence, '^.{100}', "") AS ?sequencestrip1)
但不是
BIND(REPLACE(?sequence, '^.{?start}', "") AS ?sequencestrip1)
我認為這適用於任何有興趣的人:
BIND(REPLACE(?sequence, "^.{"+str(?start)+"}", "") AS ?sequencestrip1)
當然要刪除你感興趣的區域
BIND(REPLACE(?region, ".{"+str(strlen(?region)-10)+"}$", "") AS ?upstream)
在RDF的第一個SPARQL查詢語言中 ,這將是相當困難的,因為沒有很多字符串操作函數。 但是,在您的問題中,您使用了SPARQL 1.1查詢語言中出現的replace
。 這對你有好處,因為除了replace
,SPARQL 1.1還包含更多的字符串操作函數。 其中之一, substr
,完全符合您的需求。 例如,這是一個查詢,其中?string
綁定到您提到的字符串, substr
用於提取您正在尋找的子字符串並將其綁定為?substring
。
select * where {
values ?string { "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." }
bind( substr( ?string, 5, 6 ) as ?substring )
}
結果是:
--------------------------------------------------
| string | substring |
==================================================
| "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." | "FHWOIE" |
--------------------------------------------------
請注意, substr
的第二個參數是起始位置(第一個索引為1),第三個參數是子字符串的長度 ,而不是最終位置。 你想要一個子字符串FHWOIE
,它有六個字符,第三個參數是6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.