sparql正则表达式引号和破折号

时间:2016-04-23 21:28:51

标签: regex escaping sparql quotation-marks

我有一个像“10-16.7”这样的文字字符串。我想过滤它并取第一个数字。在这个例子中,我想只过滤数字10。

我认为这是正确的正则表达式:(["'])(.*-*)-.* 但是当我在我的查询中尝试它时,它无法识别[“']模式。 所以我发现了Escape sequences in strings 但是当我尝试FILTER regex(?mystring, "(\")(.*-*)-.*") }时,它不会给出错误,但它也没有捕捉到任何错误。 (我的数据集包含“50-58”,“9.4-13”,“72-85”等值。)

1 个答案:

答案 0 :(得分: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的变量。