4

我正在尝试使用索引号提取字符串的一部分。当有

"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)
4

1 回答 1

5

RDF 的第一个 SPARQL 查询语言中,这将是相当困难的,因为没有很多字符串操作函数。但是,在您的问题中,您使用了SPARQL 1.1 Query Languagereplace中出现的。这对您有好处,因为除了 之外,SPARQL 1.1 还包括更多字符串操作函数。其中之一,,正是你所需要的。例如,这是一个绑定到您提到的字符串的查询,用于提取您要查找的子字符串并将其绑定为.replacesubstr?stringsubstr?substring

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

结果是:

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

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

于 2013-08-01T12:30:25.190 回答