我试图通过使用索引号来提取字符串的一部分。 有了
"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)
答案 0 :(得分:5)
在第一个SPARQL Query Language for RDF中,这将是相当困难的,因为没有很多字符串操作函数。但是,在您的问题中,您使用replace
中显示的SPARQL 1.1 Query Language。这对你有好处,因为除了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),第三个参数是子字符串的 length ,而不是最终位置。你想要一个子字符串FHWOIE
,它有六个字符,第三个参数是6。