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)
.*_
模式尽可能匹配任意零个或多个字符,然后匹配一个_
字符,由于替换参数为空字符串,匹配的文本被移除,并且你得到的只是最后一个 _
.
之后的子字符串
注意:如果字符串中没有_
,则输出为输入字符串,原封不动。
在我的 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)
.*_
模式尽可能匹配任意零个或多个字符,然后匹配一个_
字符,由于替换参数为空字符串,匹配的文本被移除,并且你得到的只是最后一个 _
.
注意:如果字符串中没有_
,则输出为输入字符串,原封不动。