2017-07-06 51 views
0

ANS680401571E0001(FreeEntry-ControlledExit)01930F0003(役)019423Gate接口控制器173(寫入0xAD)019545G.IC(1014028)EntryValidator(01.00.14028)ExitValidator(01.00.14028)53卸下串c#

的特定部分

第一個「(」需要刪除之前的所有內容沒有關於這個部分可以有多長的規則(它有所不同)然後在「)」之後,除去最後4個字符之前的所有內容下一個「(」,在這種情況下,0003需要保留,另外請注意,01930F可以改變,長度也會改變,接下來的每一個之間的「(InService)」和「Gate」必須被移除。必須刪除「ExitValidator(01.00.14028)」之後VED。

這基本上是一旦完成後需要的樣子。

(FreeEntry-ControlledExit) 0003(役) 門接口控制器173(寫入0xAD) GIC(1014028) EntryValidator(01.00.14028) ExitValidator(01.00.14028)

+6

什麼邏輯規則指示*刪除了哪些文本?即爲什麼01930F0003成爲0003等等? –

+2

你已經試過了什麼?你怎麼知道應該刪除哪些文本?聽起來像(btw。unsolvable)「給我teh codez」給我。 – Mischa

+1

@MischaBehrend拼寫爲「給我代碼」。 –

回答

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); 

這將導致與構建是>>"(FreeEntry-ControlledExit)0003(InService)Gate Interface Controller 173(0XAD)G.I.C(1014028)EntryValidator(01.00.14028)ExitValidator(01.00.14028)"

Online example


這應該是可能的正則表達式,但我沒有,現在想想那個時候。也許我稍後會在沒有足夠的答案時更新我的​​答案。

+0

這有效。 – Anonamoose