2016-12-09 96 views
-2

我有一個字符串,如下所示。用子串替換字符串

{{"sId":"HSFJFKJ.dsfhshd","min":"AKK213AD23456","info":"text"}, 
{"sId":"HSFJFKJ.dsd7shd","min":["BKK213ACD23456","BKK213AB1CD23456"],"info":"text"}, 
{"sId":"HSFJFKJ.dsdf7shd","min":"BKK213AB1CD23456","info":"text"}, 
{"sId":"HSFJFKJ.dsdd7shd","min":"CKK213AB1CD23456","info":"text"}} 

如果您看到「min」值有時是單個值,有時會重複。 因此,我想刪除這個「min」值的重複。它必須是一個單一的價值。

所以我想分析完整的字符串(很長的字符串),並找到「min」是否有多個值。如果它有多個值,則將其替換爲單個值。

實施例:

替換:

"min":["BKK213AB1CD23456","BKK213AB1CD23456"] 

隨着:

"min":"BKK213AB1CD23456" 

尋找在C#爲此任何簡單的解決方案。

+1

解決你總有方括號分鐘的價值,即使它是單一的元素? – DarkKnight

+0

只有存在多個值時,我們纔有方括號 – Jeev

+0

您的格式不一致。您可以解決重複問題,但是您的格式需要一致。 – DarkKnight

回答

1

這是一個正則表達式直解。任何單個「最小」值將被保留,而倍數將被降低到第一個值。

Regex.Replace(input, "\"min\":\\[(\"[A-Z\\d]+\").+?\\]", "\"min\":$1"); 

擊穿:

  • \[\]匹配字面括號
  • ("[A-Z\d]+")字符串在引號匹配和捕獲組
  • .+?前的匹配一切(懶惰匹配)右括號
  • 在替換中,$1所引用捕獲組

見我上regex101

+0

謝謝..這對我有用.. – Jeev

0

使類如下

public class Data 
{ 
    public int SId { get; set;} 
    public HashSet<string> hashsetMinValues { get; set;} 
    public string Info { get; set;} 

    public List<Data> ReadData() 
    { 
     //Read you object in list of data i.e List<Data> 
    } 
} 

當您在HashSet中添加min值,HashSet的將自身刪除重複值

希望這有助於。

0

我覺得這是你能做的最好的..

void Main() 
{ 
    var inputStr = @"[{'sId':'HSFJFKJ.dsfhshd','min':'AKK213AD23456','info':'text'}, 
    {'sId':'HSFJFKJ.dsd7shd','min':['BKK213AB1CD23456','BKK213AB1CD23456'],'info':'text'}, 
    {'sId':'HSFJFKJ.dsdf7shd','min':'BKK213AB1CD23456','info':'text'}, 
    {'sId':'HSFJFKJ.dsdd7shd','min':'CKK213AB1CD23456','info':'text'}]"; 

    inputStr = inputStr.Replace("'min':'","'min':['").Replace("','info'","'],'info'"); 

    var dest = JsonConvert.DeserializeObject<test[]>(inputStr); 

    var finalList = dest.Select(d => new test() { sId=d.sId,min=d.min.Distinct().ToArray(),info=d.info }); 

    //This will have your final string 
    var output = JsonConvert.SerializeObject(finalList); 

} 

// Define other methods and classes here 
public class test 
{ 
    public string sId { get; set; } 
    public string[] min { get; set; } 
    public string info { get; set; } 
}