SPARQL字符串RANGE

Jas*_*per 4 string sparql selection region

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

"OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..."
Run Code Online (Sandbox Code Playgroud)

我需要字符串,5:10 (FHWOIE)我发现它不可能通过REGEX,因为它只返回布尔而不返回组.但是,我没有设法通过位置找到字符串上的区域选择.现在我想知道是否有?

我发现部分可能通过......

BIND(REPLACE(?sequence, '^.{100}', "") AS ?sequencestrip1)
Run Code Online (Sandbox Code Playgroud)

但不是

BIND(REPLACE(?sequence, '^.{?start}', "") AS ?sequencestrip1)
Run Code Online (Sandbox Code Playgroud)

我认为这适用于任何有兴趣的人:

BIND(REPLACE(?sequence, "^.{"+str(?start)+"}", "") AS ?sequencestrip1)
Run Code Online (Sandbox Code Playgroud)

当然要删除你感兴趣的区域

BIND(REPLACE(?region, ".{"+str(strlen(?region)-10)+"}$", "") AS ?upstream)
Run Code Online (Sandbox Code Playgroud)

Jos*_*lor 5

RDF的第一个SPARQL查询语言中,这将是相当困难的,因为没有很多字符串操作函数.但是,在您的问题中,您已经使用replaceSPARQL 1.1查询语言中出现的内容.这对你有好处,因为除此之外replace,SPARQL 1.1包含更多的字符串操作函数.其中之一,substr完全符合您的需求.例如,这是一个查询,其中?string绑定到您提到的字符串,并substr用于提取您正在寻找的子字符串并将其绑定为?substring.

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

结果是:

--------------------------------------------------
| string                             | substring |
==================================================
| "OEIUFHWOIEFWNFOPQWJFHQWOIHFEB..." | "FHWOIE"  |
--------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

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