繁体   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