2012-12-10 44 views
3

這是我期待修改字符串: 170-0175-00B荷瘤板MACHINING.asm:2VB.Net刪除一切後三連字符

我想保持「170-0175 -00B「。所以我需要刪除第三個連字符以及後面的任何連字符。

+0

第三個連字符總是最後的連字符? –

回答

3

,迅速解決

string test = "170-0175-00B-BEARING PLATE MACHINING.asm:2"; 
int num = 2; 
int index = test.IndexOf('-'); 
while(index > 0 && num > 0) 
{ 
    index = test.IndexOf('-', index+1); 
    num--; 
} 
if(index > 0) 
    test = test.Substring(0, index); 
當然

,如果你正在尋找的最後一個連字符,然後是更簡單的事

int index = test.LastIndexOf('-'); 
if(index > 0) 
    test = test.Substring(0, index); 
+0

謝謝史蒂夫,我沒有注意到你們這麼快回復,所以我正在同時處理我自己的解決方案。最後,我明白了(明天當我能夠回覆我的帖子時,我會發布它)。 – Alex

+2

很難預測,但通常答案來得很快 – Steve

1

像這樣的事情?

regex.Replace(sourcestring,"^((?:[^-]*-){2}[^-]*).*","$1",RegexOptions.Singleline)) 

雖然您可能不希望Singleline選項,具體取決於您如何使用它。

1

非常感謝這麼快的回覆。

下面是我採取的方法:

FormatDessinName("170-0175-00B-BEARING PLATE MACHINING.asm:2") 


Private Function FormatDessinName(DessinName As String) 
    Dim match As Match = Regex.Match(DessinName, "[0-9]{3}-[0-9]{4}-[0-9]{2}[A-Za-z]([0-9]+)?") 'Matches 000-0000-00A(optional numbers after the last letter) 
    Dim formattedName As String = "" 

    If match.Success Then 'Returns true or false 
     formattedName = match.Value 'Returns the actual matched value 
    End If 

    Return formattedName 
End Function 

的偉大工程!

2

一些LINQ呢?

Dim str As String = "170-0175-00B-BEARING PLATE MACHINING.asm:2" 
MsgBox(String.Join("-"c, str.Split("-"c).Take(3))) 

通過這種方法,您可以在N連字符之後取出任何內容,其中N易於控制(常量)。