2016-04-23 37 views
0

我有一個像「10-16.7」這樣的字符串。我想過濾它,並採取第一個號碼。在這個例子中,我只想過濾數字10。sparql正則表達式引號和短劃線

我認爲這是正確的正則表達式:(["'])(.*-*)-.* 但是當我嘗試在我的查詢它不承認[「']模式 所以我發現這個Escape sequences in strings 但是當我嘗試FILTER regex(?mystring, "(\")(.*-*)-.*") }它沒有。 (我的數據集包含「50-58」,「9.4-13」,「72-85」等數值)

+1

如果它是一個文字字符串,那麼引號可能不是它的一部分。 –

+0

實際上,如果我嘗試使用正則表達式(?mystring,「(。* - *) - 。*」)}它會捕獲整個字符串。 – linous

回答

1

如果您有一個數字後跟一個破折號後跟任何東西,我會使用以下正則表達式(假設你不需要擔心數字是有效的,因爲這匹配的字符串如"00323..23....3.-2",例如):

^([0-9.]+)-.*

我假設引號實際上並不是字符串的一部分。如果是這樣,只需要添加\"^\"([0-9.]+)-.*

要提取的數量,你需要把它BIND一個變量,像這樣:

FILTER(REGEX(?test, "^[0-9.]+-")) 
BIND(REPLACE(?mystring, "^([0-9.]+)-.*", "$1") AS ?number) 

在這裏,我通過與第一捕獲替換字符串獲得數組($1),它與數字匹配,並將結果綁定到名爲?number的變量。

+1

是的,如果圖案實際上是數字,然後點,然後連字符,這是要走的路。但是,如果總是首先出現這兩個字符,那麼獲取子字符串可能會更好。 –

+1

是的,你是對的,除了這裏的模式是「數字和/或點,然後連字符」,而不是「數字,然後點,然後連字符」。 – evsheino

+0

其實,我認爲使用正則表達式有點安全(除非你100%確定你需要前n個字符),因爲它很難驗證你正確地使用子字符串。 – evsheino

相關問題