Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的字符串分析#_C# - Fatal编程技术网

C# c语言中的字符串分析#

C# c语言中的字符串分析#,c#,C#,我有一根绳子 (ProductAttributes,MapType(StringType,StructType( List( (CurrentValue,StringType,true), (OldValue,StringType,true), (LastValue,StringType,true))),true),true) 我需要提取StructType(列表((CurrentValue,StringType,true),(OldValue,StringType,true)

我有一根绳子

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

我使用了string.split,使用分隔符作为“,”,但我没有得到整个结构字符串。使用“,”时得到的字符串

(产品属性)

映射类型(StringType)

StructType(列表)((当前值

弦型 (对)

(旧值 弦型 (对)

(最后值 弦型 是的) (对) (对)

我可以将count参数设置为“3”,但我的字符串可能会更改。我尝试将分隔符设置为“()”,以获取完整字符串

预期的结果是这样的。我可以使用一个对象构建这个字符串,但是现在从字符串中提取值对我来说是一个拦路虎

{“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
的第一个实例,然后计算
(字符串开头和找到的实例之间的
)的数量。然后从字符串末尾计算相同数量的
,以获得子字符串

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);
var stringToParse=@“(产品属性,映射类型(StringType,StructType(
列表((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.长度;
对于(int i=0;i

注意:我们在
中添加1(
for循环中计数
以确保我们回到匹配的
对于我们的初始搜索字符串
StructType(

),正如注释中所述,很难知道您的字符串将来会如何变化,但这个答案可以作为一个起点(因为它将与您已经提供的字符串一起工作)

您可以找到
StructType
的第一个实例,然后计算
(字符串开头和找到的实例之间的
)的数量。然后从字符串末尾计算相同数量的
,以获得子字符串

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);
var stringToParse=@“(产品属性,映射类型(StringType,StructType(
列表((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.长度;
对于(int i=0;i

注意:我们将1添加到
for循环中的
计数
,以确保我们将计数回匹配的
作为初始搜索字符串
StructType(

您能告诉我们预期的结果吗?最简单的方法是从两端扫描以找到您想要的区块,或者您可能能够使用正则表达式,但如果您想以智能方式进行操作,您需要一个平衡正则表达式()您需要给出更多的示例并解释输入的结构以及它可能如何更改,否则答案是
string x=“StructType(List((CurrentValue,StringType,true),(OldValue,StringType,true),(LastValue,StringType,true))”
您能告诉我们预期的结果吗?最简单的方法是从两端扫描以找到您想要的区块,或者您可以使用正则表达式,但如果您想以智能方式执行,则需要一个平衡正则表达式()您需要给出更多的示例,并解释输入的结构以及它可能如何更改,否则答案是
string x=“StructType(List((CurrentValue,StringType,true),(OldValue,StringType,true),(LastValue,StringType,true))”