[英]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.