簡體   English   中英

使用正則表達式從SPARQL查詢中提取信息

[英]Extracting information from a SPARQL query using regular expressions

我很難創建一個從此SPARQL查詢中提取名稱空間的正則表達式:

SELECT * 
WHERE {
    ?Vehicle rdf:type umbel-sc:CompactCar ;
             skos:subject <http://dbpedia.org/resource/Category:Vehicles_with_CVT_transmission>;
             dbp-prop:assembly ?Place.
    ?Place geo-ont:parentFeature dbpedia:United_States .
}

我需要得到:

"rdf", "umbel-sc", "skos", "dbp-prop", "geo-ont", "dbpedia"

我需要這樣的表達:

\\s+([^\\:]*):[^\\s]+

但以上方法無效,因為它在到達之前還會占用空間: 我究竟做錯了什么?

我不知道SPARQL語法的詳細信息,但我可以想象這不是一種正則語言,因此正則表達式將無法完美地做到這一點。 但是,如果您搜索的東西看起來像一個單詞,並且左邊被空格包圍,右邊被冒號包圍,您會變得非常接近。

如果您的輸入格式已知並且受到足夠的限制,則此方法對於快速解決方案可能足夠好。 有關更通用的解決方案,建議您尋找或為SPARQL語言創建合適的解析器。

話雖如此,請嘗試以下操作:

string s = @"SELECT * 
WHERE {
    ?Vehicle rdf:type umbel-sc:CompactCar ;
    skos:subject <http://dbpedia.org/resource/Category:Vehicles_with_CVT_transmission>;
    dbp-prop:assembly ?Place.
    ?Place geo-ont:parentFeature dbpedia:United_States .
}";

foreach (Match match in Regex.Matches(s, @"\s([\w-]+):"))
{
    Console.WriteLine(match.Groups[1].Value);
}

結果:

rdf
umbel-sc
skos
dbp-prop
geo-ont
dbpedia

所以我需要一個這樣的表達式:

 \\\\s+([^\\\\:]*):[^\\\\s]+ 

但是上述方法不起作用,因為它在到達“:”之前也會占用空間。

正則表達式會占用這些空間,是的,但是括號中捕獲的組將不包含它。 那是問題嗎? 您可以通過讀取Regex.Match返回的Match對象中的Groups[1].Value來訪問該組。

如果您確實需要正則表達式匹配這些空格,則可以使用所謂的后向斷言

(?<=\s)([^:]*):[^\s]+

順便說一句,您不需要將所有的反斜杠加倍。 請使用逐字字符串 ,如下所示:

Regex.Match(input, @"(?<=\s)([^:]*):[^\s]+")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM