2013-08-01 80 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.