2017-10-11 12 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に(前にすべてのものを、「」)戻り、(、「」オプションである)であるように、第2の例では、行全体を返しますか?私が試した

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

このようにしますか? https://regex101.com/r/LNHYOY/2 – CAustin

+0

入力文字列は有効なJSONのように見えます。エンコードされたデータ構造を復元してそこから値を取得するためにJSONデコード関数を使用できない理由はありますか? – axiac

答えて

0

を使用する言語、正規表現では、デフォルトでは貪欲である:.*一部は、可能な限り一致させることを望んでいます。 .*.*?に置き換えることで、正規表現をungreedyにすることができます(可能な限り少数の文字に一致させたい)。

ここで、部分文字列は最初の行の先頭で区切られ、末尾の文字は,""または}です。このようなもので、あなたは第二の部分をキャプチャする必要がない場合は、代わりにアサーションを使用することが標準化されたマッチ(} charcterを省略)

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

を取得します。

^(.+?)(?=,""|\}$) 
関連する問題