VB.Net删除第三个连字符后的所有内容

时间:2012-12-10 20:25:30

标签: regex vb.net hyphen

这是我要修改的字符串: 170-0175-00B -BEARING PLATE MACHINING.asm:2

我想保持“ 170-0175-00B ”。所以我需要删除第三个连字符以及之后的任何内容。

4 个答案:

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

答案 1 :(得分: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很容易控制(常量)。

答案 2 :(得分:1)

这样的东西?

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

您可能不需要Singleline选项,具体取决于您的使用方式。

答案 3 :(得分: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

效果很好!