String SPARQL字符串范围

String SPARQL字符串范围,string,selection,sparql,region,String,Selection,Sparql,Region,我试图通过使用索引号来提取字符串的一部分。 有 "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." 我需要5:10(FHWOIE)中的字符串,我发现通过正则表达式是不可能的,因为它只返回布尔值而不返回组。但是,我没有通过位置在字符串上找到区域选择。现在我想知道有没有 我发现部分可能是通过 BIND(REPLACE(?sequence, '^.{100}', "") AS ?sequencestrip1) 但不是 BIND(REPLACE(?sequence, '^.{?st

我试图通过使用索引号来提取字符串的一部分。 有

"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)
在第一种情况下,这将相当困难,因为没有太多的字符串操作函数。但是,在您的问题中,您使用了中出现的。这对您有好处,因为除了
replace
,SPARQL 1.1还包括更多的字符串操作函数。其中一个,正是你所需要的。例如,这里有一个查询,其中
?string
绑定到您提到的字符串,
substr
用于提取您要查找的子字符串,并将其绑定为
?substring

select * where { 
  values ?string { "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." }
  bind( substr( ?string, 5, 6 ) as ?substring )
}
结果是:

--------------------------------------------------
| string                             | substring |
==================================================
| "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." | "FHWOIE"  |
--------------------------------------------------

请注意,
substr
的第二个参数是起始位置(其中第一个索引为1),第三个参数是子字符串的长度,而不是最终位置。您需要一个子字符串,
FHWOIE
,它有六个字符,第三个参数是6。

关于StackOverflow,您可以回答自己的问题。如果你找到了一个解决方案,你可以把它作为答案发布。这有助于让晚到的人更清楚地了解情况。