sparql regex кавычки и тире
У меня есть буквальная строка вроде "10-16.7" . Я хочу отфильтровать его и взять первый номер. В этом примере я хочу отфильтровать только число 10 .
Я думаю, что это правильное регулярное выражение: (["'])(.*-*)-.*
но когда я пытаюсь выполнить запрос, он не распознает шаблон ["']. но когда я пытаюсь 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
,