SPARQL字符串范围

4
我正在尝试通过使用索引号来提取字符串的一部分。 例如,在拥有以下字符串时:

"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上,你可以回答自己的问题。如果你找到了解决方案,你可以将其发布为答案。这有助于使后来者更清晰地了解问题。 - Joshua Taylor
1个回答

5
在第一个SPARQL查询语言 for RDF中,这将是相当困难的,因为没有太多的字符串操作函数。然而,在您的问题中,您使用了replace,它出现在SPARQL 1.1查询语言中。这对您来说很好,因为除了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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接