ANS680401571E0001(FreeEntry-ControlledExit)01930F0003(InService)019423Gate接口控制器173(0XAD)019545G.I.C(1014028)EntryValidator(01.00.14028)ExitValidator(01.00.14028)53
第一个之前的一切&#34;(&#34;需要被删除。没有关于这部分可以有多长的规则(它不同)。然后在&#34;)&#34;一切都需要删除除了下一个&#34之前的最后4个字符(&#34;,在这种情况下,0003需要保留。还要注意01930F可以改变,长度也会改变。接下来每隔一个之后必须删除&#34;(InService)&#34;和#34; Gate&#34;并且必须删除&#34; ExitValidator(01.00.14028)&#34;之后的所有内容。< / p>
这基本上就是它完成后的样子。
(FreeEntry-ControlledExit) 0003(在职) 门接口控制器173(0XAD) G.I.C(1014028) EntryValidator(01.00.14028) ExitValidator(01.00.14028)
答案 0 :(得分:0)
对此没有简单的解决方案,但我会先制作一些方法来对整个输入字符串进行子串,如下所示:
string p(string input, string openSign, string closeSign, ref int sPos, int lOffset = 0, int rOffset = 0)
{
int idxL = input.IndexOf(openSign, sPos);
int idxR = input.IndexOf(closeSign, idxL);
sPos = idxL + 1;
if(idxL != -1 && idxR != -1)
{
int s = idxL - lOffset;
int e = idxR + 1 + rOffset;
return input.Substring(s, e - s);
}
return string.Empty;
}
然后你可以像这样使用它:
string input = "ANS680401571E0001(FreeEntry-ControlledExit)01930F0003(InService)019423Gate Interface Controller 173(0XAD)019545G.I.C(1014028) EntryValidator(01.00.14028) ExitValidator(01.00.14028)53";
string build = "";
build = "";
int i = 0;
build += p(input, "(", ")", ref i, 0, 0);
build += p(input, "(", ")", ref i, 4, 0);
build += p(input, "Gate", ")", ref i, 0, 0);
build += p(input, "G.I.C", ")", ref i, 0, 0);
build += p(input, "Entry", ")", ref i, 0, 0);
build += p(input, "Exit", ")", ref i, 0, 0);
这将导致构建为&gt;&gt; "(FreeEntry-ControlledExit)0003(InService)Gate Interface Controller 173(0XAD)G.I.C(1014028)EntryValidator(01.00.14028)ExitValidator(01.00.14028)"
这应该可以使用正则表达式,但我现在没有时间考虑这个问题。也许我会在以后没有足够的答案时更新我的答案。