2013-08-01 122 views
4

我試圖通過使用索引號來提取一部分字符串。 有SPARQL字符串範圍

"OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." 

當我需要從5:10 (FHWOIE)字符串我發現這是不可能通過正則表達式爲僅返回布爾值,而不是羣體。但是,我沒有設法通過職位找到字符串的區域選擇。現在我想知道有沒有?

我發現,這部分是可以通過...

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) 
+1

在StackOverflow上,你可以回答你自己的問題。如果您找到解決方案,可以將其作爲答案發布。這有助於讓以後到達的人更清楚。 –

回答

5

在第一個SPARQL Query Language for RDF,這將是相當困難,因爲沒有太多的字符串操作函數。然而,在你的問題中,你使用了replace,它出現在SPARQL 1.1 Query Language。這對您有好處,因爲除了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.