sparql regex кавычки и тире

У меня есть буквальная строка вроде "10-16.7" . Я хочу отфильтровать его и взять первый номер. В этом примере я хочу отфильтровать только число 10 .

Я думаю, что это правильное регулярное выражение: (["'])(.*-*)-.*но когда я пытаюсь выполнить запрос, он не распознает шаблон ["']. Escape-последовательности в строках но когда я пытаюсь FILTER regex(?mystring, "(\")(.*-*)-.*") } это не дает ошибки, но и ничего не улавливает. (Мой набор данных содержит значения, такие как "50-58", "9.4-13", "72-85" и т. Д.)

1 ответ

Решение

Если у вас есть число, за которым следует тире, за которым следует что-нибудь, я бы использовал следующее регулярное выражение (при условии, что вам не нужно беспокоиться о том, что числа действительны, так как это соответствует таким строкам: "00323..23....3.-2", например):

^([0-9.]+)-.*

Я предполагаю, что кавычки на самом деле не являются частью строки. Если они есть, просто добавьте \": ^\"([0-9.]+)-.*

Чтобы извлечь номер, вам нужно BIND это к переменной, вот так:

FILTER(REGEX(?test, "^[0-9.]+-"))
BIND(REPLACE(?mystring, "^([0-9.]+)-.*", "$1") AS ?number)

Здесь я получаю число, заменяя строку первой группой захвата ($1), который соответствует номеру и связывает результат с переменной ?number,

Другие вопросы по тегам