如何从 SPARQL 中的给定电子邮件地址中提取工作地点

问题描述

例如:“john@mora.org”是电子邮件地址,我想使用 SPARQL 从此电子邮件提取 mora

这是我没有给出预期结果的方法

BASE <http://timbl.org/foaf.rdf>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?work_place
FROM <http://timbl.org/foaf.rdf>
WHERE
{
<#timbl> foaf:kNows ?friend .
?friend foaf:name ?name .
?friend foaf:mBox ?mail .
BIND(REPLACE(STR(?mail),"^.*@","","i") as ?work_place) .
}

示例输入:

"john@mora.org"

预期结果:

"mora"

我收到的结果:

"mora.org"

需要在查询或正则表达式中添加什么才能获得预期的输出

解决方法

您的方法仅删除了您匹配的部分字符串,如果您还想匹配并删除另一个子字符串,您可以嵌套替换。像这样的东西应该可以工作。

 BASE    <http://timbl.org/foaf.rdf>
 PREFIX  foaf: <http://xmlns.com/foaf/0.1/>
 
 SELECT  ?name ?work_place
 FROM <>
 WHERE
   { <#timbl>  foaf:knows  ?friend .
     ?friend   foaf:name   ?name ;
               foaf:mbox   ?mail
     BIND(replace(replace(str(?mail),"^.*@","","i"),"\..*$","i") AS ?work_place)
   }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...