2017-10-11 59 views
0

我之前捕獲所有內容的所有嘗試都只返回最後一次出現。我有以下幾個源字符串示例。如何捕獲重複的可選值

{"rec_timestamp": "2016-12-25T11:43:38.763-0700","151521": "-18.788","151515": "25","151522": "2.804","151520": "3506","151523": "-18.4","11124": "NO_DEFECT|","151516": "0","151510": "ALCLFA2BA314","151518": "3.28","151519": "24.398438","": "","": "","": "","": ""} 
{"rec_timestamp": "2016-12-25T11:43:38.763-0700","151521": "-18.788","151515": "25","151522": "2.804","151520": "3506","151523": "-18.4","11124": "NO_DEFECT|","151516": "0","151510": "ALCLFA2BA314","151518": "3.28","151519": "24.398438"} 

所以對於我就多達......「24.398438」的第一條記錄返回到$ 1(之前的一切,「」)和第二個例子返回整行的是(「」是可選的)?

我想:

(^.*)(,""*?) 
(^.*)(,"".*) 
+1

是否這樣? https://regex101.com/r/LNHYOY/2 – CAustin

+0

輸入字符串看起來像有效的JSON。是否有任何理由不能使用JSON解碼函數來恢復編碼的數據結構並從中獲取值? – axiac

回答

0

你們用什麼語言,正則表達式是由默認的貪婪:在.*部分要儘可能長時間地匹配。您可以通過將替換爲.*?來非正規表達式(它希望匹配儘可能少的字符)。

在這裏,您的子字符串由開頭處的行的起始位置以及行末尾的字符,""或字符}定界。像這樣的東西,你會得到一個標準化的比賽(省略}字符內)

^(.+?)(,"".*|\}$) 

如果沒有需要捕獲的第二部分,你可以使用斷言來代替。

^(.+?)(?=,""|\}$)