我在查询中遇到了这样的字符串
o = 'some interesting {foo123:bar_675:get_me.xyz} string'
我希望提取花括号内最后一个冒号后面的部分,因此在这种情况下是get_me.xyz
。
我知道正则表达式\{.*:(.*)\}
可以实现(在Python中测试过):
import re
o = 'some interesting {foo123:bar_675:get_me.xyz} string'
re.findall('\{.*:(.*)\}', o)
将返回
['get_me.xyz']
我现在该如何在查询中使用这个正则表达式呢?
我尝试了以下代码:
SELECT (regex(?o, "\{.*:(.*)\}") as ?substring) ?o
WHERE {
?s ?p ?o .
}
但是这总是会抛出一个错误
Parse error on line 6:
...SELECT (regex(?o, "\{.*:(.*)\}") as ?
---------------------^
Expecting 'IRIREF', 'PNAME_NS', 'VAR', '(', 'INTEGER', '!', '-', 'FUNC_ARITY0', 'FUNC_ARITY1', 'FUNC_ARITY2', 'IF', 'BOUND', 'BNODE', 'EXISTS', 'COUNT', 'FUNC_AGGREGATE', 'GROUP_CONCAT', 'DECIMAL', 'DOUBLE', 'true', 'false', 'STRING_LITERAL1', 'STRING_LITERAL2', 'STRING_LITERAL_LONG1', 'STRING_LITERAL_LONG2', 'INTEGER_POSITIVE', 'DECIMAL_POSITIVE', 'DOUBLE_POSITIVE', 'INTEGER_NEGATIVE', 'DECIMAL_NEGATIVE', 'DOUBLE_NEGATIVE', 'PNAME_LN', '+', 'NOT', 'CONCAT', 'COALESCE', 'SUBSTR', 'REGEX', 'REPLACE', got 'INVALID'
'some interesting get_me.xyz string'
。但我只想要get_me.xyz
部分。有什么想法吗? - Clebreplace(?o, '^.*\\{.*:(.*)\\}.*$', "$1")
?另请参阅https://www.w3.org/TR/xpath-functions/#regex-syntax。您还可以使用`STRBEFORE` +STRAFTER
。 - Stanislav Kralin