簡體   English   中英

c# 中的字符串解析

[英]String parse in c#

我有一個字符串

 (ProductAttributes,MapType(StringType,StructType(
   List( (CurrentValue,StringType,true), (OldValue,StringType,true), 
   (LastValue,StringType,true))),true),true)

我需要提取 StructType(List( (CurrentValue,StringType,true), (OldValue,StringType,true), (LastValue,Stringy )

我使用了 string.split,使用分隔符作為“,”,但我沒有得到整個結構字符串。我在使用“,”時得到的字符串

(產品屬性

地圖類型(字符串類型

結構類型(列表((當前值

字符串類型真)

(舊值字符串類型為真)

(LastValue StringType true))) true) true)

我可以將計數參數指定為“3”,但我的字符串可能會更改。我嘗試將分隔符指定為“()”以獲得完整的字符串。

預期的結果是這樣的。我可以使用 object 構建這個字符串,但現在從字符串中提取值對我來說是一個障礙

{"FieldId":"401","Name":"CurrentValue","Type":"string","ParentName":"ProductAttributes>CurrentValue","ParentId":"4"}

另一個字符串示例是:

   (BusinessRules,ArrayType(StructType(List( (Id,IntegerType,true), (ErrorCode,IntegerType,true), (Overrides,ArrayType(StructType(List( (OverrideSource,IntegerType,true), (IsOverridden,BooleanType,true), (ReasonId,IntegerType,true), (OverriddenBy,StringType,true), (OverrideDate,LongType,true), (DependencyProductAttributeIds,ArrayType(IntegerType,true),true))),true),true))),true),true)

如評論中所述,很難知道您的字符串將來會如何變化,但可以將此答案用作起點(因為它將與您已經提供的字符串一起使用)

您可以找到StructType的第一個實例,然后從字符串的末尾計算(在字符串的開頭和找到的實例之間的數量。然后計算相同的數量)以獲得您的 substring。

var stringToParse = @" (ProductAttributes,MapType(StringType,StructType(
   List( (CurrentValue,StringType,true), (OldValue,StringType,true), 
   (LastValue,StringType,true))),true),true)";

var start = stringToParse.IndexOf("StructType(");

var count = stringToParse.Substring(0, start).Count(c => c == '(');

var end = stringToParse.Length;

for(int i = 0; i < count + 1; i++)
{
    end = stringToParse.LastIndexOf(')', end - 1);
}

var result = stringToParse.Substring(start, end - start);

Console.WriteLine(result);

注意) StructType(我們的初始搜索字符串for loop (

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM