Python 如何在SPARQL regex()中使用逻辑OR?

Python 如何在SPARQL regex()中使用逻辑OR?,python,regex,filter,sparql,Python,Regex,Filter,Sparql,我在python程序的SPARQL查询中使用了这一行: FILTER regex(?name, "%s", "i" ) (其中%s是用户输入的搜索文本) 如果?name或?featurename包含%s,我希望这两者匹配,但我似乎找不到任何使用regex()的文档或教程。我尝试了几件似乎合理的事情: FILTER regex((?name | ?featurename), "%s", "i" ) FILTER regex((?name || ?featurename), "%s", "i" )

我在python程序的SPARQL查询中使用了这一行:

FILTER regex(?name, "%s", "i" )
(其中
%s
是用户输入的搜索文本)

如果
?name
?featurename
包含
%s
,我希望这两者匹配,但我似乎找不到任何使用regex()的文档或教程。我尝试了几件似乎合理的事情:

FILTER regex((?name | ?featurename), "%s", "i" )
FILTER regex((?name || ?featurename), "%s", "i" )
FILTER regex((?name OR ?featurename), "%s", "i" )
FILTER regex((?name, ?featurename), "%s", "i" )
以及没有
()

正确的方法是什么? 谢谢

更新:使用UNION works。但我发现,如果您只是重复regex()部分,它也会起作用,如下所示:

FILTER (regex(?name, "%s", "i") || regex(?featurename, "%s", "i" ))
这两种解决方案似乎都有点混乱,因为您必须使用具有相同字符串副本的2元素元组来填充这两个
%s
s。这是怎么回事

SELECT ?thing
WHERE {
  { 
    ?thing x:name ?name .
    FILTER regex(?name, "%s", "i" )
  } UNION {
    ?thing x:featurename ?name .
    FILTER regex(?featurename, "%s", "i" )
  }
}
SELECT ?thing
WHERE {
  { 
    ?thing x:name ?name .
    FILTER regex(?name, "%s", "i" )
  } UNION {
    ?thing x:featurename ?name .
    FILTER regex(?featurename, "%s", "i" )
  }
}