SPARQL使用正则提取字符串最后一个下划线后内容适配Jena Fuseki
问题原因
你原来的写法存在两处核心错误:
STRAFTER函数的第二个参数要求是普通字符串,不能直接传入正则匹配逻辑,且regex()函数本身返回的是布尔值(匹配成功/失败),而非匹配到的字符串内容- 正则写法语法不完整,缺少引号、闭合括号,也不符合SPARQL函数的调用规范
正确实现方案
SPARQL 1.1原生支持REPLACE正则替换函数,你可以直接用正则把「字符串开头到最后一个下划线」的所有内容替换为空,剩下的就是你需要的末尾内容,正确写法如下:
BIND(REPLACE(?ng, "^.*_", "") AS ?subj)
效果验证
- 当
?ng取值为"tilastot_teul"时,替换结果为"teul" - 当
?ng取值为"tilastot_luke_yri_teul"时,替换结果为"teul"
完全符合你的需求。
备选实现(无需正则)
如果你不想用正则,也可以通过两次字符串反转+截取的逻辑实现,写法如下:
BIND(REVERSE(STRBEFORE(REVERSE(?ng), "_")) AS ?subj)
逻辑是先把字符串反转,截取第一个下划线前的内容,再反转回原顺序,就能得到原字符串最后一个下划线后的内容。
内容的提问来源于stack exchange,提问作者Jaana
相关产品推荐
相关产品推荐

