繁体   English   中英

SPARQL字符串RANGE

[英]SPARQL string RANGE

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM