SPARQL 中带有字母和下划线的正则表达式

REGEX with letters and underscores in SPARQL

在我的 SPARQL 中,我有以下绑定

BIND(STRAFTER(?ng, "tilastot_") AS ?subj)

当我在“?ng”中有字符串“tilastot_teul”并且我需要将结尾的“teul”设置为“?subj”时它起作用了

但是如果“?ng”中有多个下划线(如“tilastot_luke_yri_teul”),我将需要正则表达式来提取最后一个下划线之后的字符串。我尝试了以下方法:

BIND(STRAFTER(?ng, regex(?ng,([a-z]*_)*) AS ?subj)

但是 jena-fuseki UI 没有接受。你能帮忙吗?

您可以使用 replace:

BIND(replace(?ng, ".*_", "") AS ?subj)

.*_模式尽可能匹配任意零个或多个字符,然后匹配一个_字符,由于替换参数为空字符串,匹配的文本被移除,并且你得到的只是最后一个 _.

之后的子字符串

注意:如果字符串中没有_,则输出为输入字符串,原封不动。