删除字符串的特定部分c#

时间:2017-07-06 10:14:30

标签: c#

  

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)

1 个答案:

答案 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)"

Online example

这应该可以使用正则表达式,但我现在没有时间考虑这个问题。也许我会在以后没有足够的答案时更新我的​​答案。