2016-10-05 8 views
0

中括弧とコロンの間の文字列の一部を置換したいと考えました。だから今、私は{"Name":で文字列{Name:の一部を交換したい開始の中括弧{とコロンの間を置換する正規表現

{Name: {\"before\":'Aj', \"after\":'Ajay'} },

:私はのような文字列があるとします。

私はやってみたRegex.Replace(rectifyAfter, @"/{([^\s].+?)(\s|$):", "{\"$1\":")。しかし、それは交換を行いません。

誰でも教えてくれますか?

+2

このようにJSONを変更することは、パーサーの仕事です。個人的には、ソースデータを修正して、これを行う必要はありません。 –

+0

@TimBiegeleisen、実際には、最初の場所で間違ったコードのために格納されたDBからソースデータが来ています。私は今それを修正しました。しかし、古いデータの場合、正規表現を使用して置き換える必要があります。 – Appu

+0

問題のあるキーはすべて一意で、すべて同じ方法で破損していますか? –

答えて

1

次の正規表現を使用します。

(?:\{)(?<Property>[a-z0-9]+)(?:\:) 

それは何:

(?:\{) - 試合をしかし開いカーリーブラケットを捕捉しない

(?<Property>[a-z0-9]+) - キャプチャグループのプロパティの名前をキャプチャします。Property

(?:\:) - 再び、試合が、:ので

プロパティの後をキャプチャしていない、基本的に、何がやりたいことは、パターン {Name:と一致しているが、それは Propertyグループの {" + 値に置き換えられている + :。以下

と交換を行うためのコードです:

string pattern = @"(?:\{)(?<Property>[a-z0-9]+)(?:\:)"; 
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase); 
string targetString = @"{Name: {\""before\"":'Aj', \""after\"":'Ajay'} },"; 
string replacement = @"{""${Property}"":"; 
return regex.Replace(targetString, replacement); 

${Property}をキャプチャグループの名前であり、それはあなたの財産の名前を保持します。

+0

魅力的な作品です!どうもありがとうございます。あなたは私の時間を救った。 :D – Appu

0

正規表現が必要な理由がわかりません。ただ、トリックを行う必要があり、単純な.Replace

string json = "" //Whatever your JSON string is. 
json = json.Replace("{Name:", "{\"Name\":"); 
関連する問題