2013-08-01 4 views
4

Я пытаюсь извлечь часть строки, используя номера индексов. При наличии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) 
+1

На StackOverflow вы можете ответить на свои вопросы. Если вы найдете решение, вы можете отправить его в качестве ответа. Это помогает сделать вещи более ясными для тех, кто прибывает позже. –

ответ

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), а третий является длина подстроки, а не конечную позицию. Вы хотели подстроку, FHWOIE, которая имеет шесть символов, до третьего аргумента - 6.