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)
在RDF的第一个SPARQL查询语言中,这将是相当困难的,因为没有很多字符串操作函数.但是,在您的问题中,您已经使用replace
了SPARQL 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.