如何删除字符串中的指定部分?

36

我有一个字符串:“NT-DOM-NV\MTA”。 如何删除第一部分:“NT-DOM-NV”, 以获得以下结果:“MTA”?

8个回答

64

您可以使用以下代码:

str = str.Substring (10); // to remove the first 10 characters.
str = str.Remove (0, 10); // to remove the first 10 characters
str = str.Replace ("NT-DOM-NV\\", ""); // to replace the specific text with blank

//  to delete anything before \

int i = str.IndexOf('\\');
if (i >= 0) str = str.SubString(i+1);

我认为关键是让它适用于多个不同的字符串,这样他就有两个字符串,并且想要从一个字符串中删除另一个字符串。 - Øyvind Bråthen
@Tassisto,我相信我已经举了足够的例子来满足你的需求。 如果它们中没有解决目前的问题,请再次解释你需要什么。希望我能有所帮助。 - Fun Mun Pieng
OP要求正则表达式 - Nitin Sawant
@NitinSawant,原帖已经回答了2年以上,但是OP在这之后修改了问题。原始问题并没有要求使用正则表达式。 - Fun Mun Pieng
int i = str.IndexOf('\'); if (i >= 0) str = str.Substring(i+1); - undefined

12

假设字符串中总是出现 "\"

var s = @"NT-DOM-NV\MTA";
var r = s.Substring(s.IndexOf(@"\") + 1);
// r now contains "MTA"

1
如果字符串是@"NT-DOM-NV\MTA\ABC\file",并且在分割NT-DOM-NV之后,我需要分割后的第一个字符串。在这种情况下,它应该是MTA。如果我要分割NT-DOM-NV\MTA,那么它应该返回ABC。谢谢。 - ASN
问题的目的是从另一个字符串的开头搜索并删除一个字符串。使用您的方法,无法动态识别字符串的位置并将其删除。 - AliNajafZadeh
@zambee 这个问题的目的是获取 \ 字符后面的任何内容,这在我的答案中已经解决了。 - Mikael Östberg
@Mikael Östberg 好的。谢谢。 - AliNajafZadeh

11
string.TrimStart(what_to_cut); // Will remove the what_to_cut from the string as long as the string starts with it.  

"asdasdfghj".TrimStart("asd" );的结果为"fghj"
"qwertyuiop".TrimStart("qwerty");的结果为"uiop"

public static System.String CutStart(this System.String s, System.String what)
{
    if (s.StartsWith(what))
        return s.Substring(what.Length);
    else
        return s;
}

"asdasdfghj".CutStart("asd" ); 现在将会得到结果 "asdfghj"
"qwertyuiop".CutStart("qwerty"); 仍然会得到结果 "uiop"


3
有点小问题。我认为很多开发者不知道这个。不管怎样,这真的是一个非常好且清晰的解决方案,我已经将我们应用程序中的所有TrimStart替换为您的CutStart方法。谢谢。 - Jacob

4

尝试

string string1 = @"NT-DOM-NV\MTA";
string string2 = @"NT-DOM-NV\";

string result = string1.Replace( string2, "" );

2
字符串结果 = 字符串1.Replace(字符串2, string.Empty); - katta

2
如果始终只有一个反斜杠,请使用这个:
string result = yourString.Split('\\').Skip(1).FirstOrDefault();

如果有多个部分,而你只想保留最后一个部分,请使用以下代码:
string result = yourString.SubString(yourString.LastIndexOf('\\') + 1);

2
您可以使用这个扩展方法:

public static String RemoveStart(this string s, string text)
{
    return s.Substring(s.IndexOf(s) + text.Length, s.Length - text.Length);
}

在你的情况下,你可以这样使用它:
string source = "NT-DOM-NV\MTA";
string result = source.RemoveStart("NT-DOM-NV\"); // result = "MTA"

注意:不要使用TrimStart方法,因为它可能会进一步修剪一个或多个字符(请参见此处)。

1
Regex.Replace(@"NT-DOM-NV\MTA", @"(?:[^\\]+\\)?([^\\]+)", "$1")

尝试在这里这里

-1
 string s = @"NT-DOM-NV\MTA";
 s = s.Substring(10,3);

1
他从未指定任何一个部分是固定长度。 - Daniel Hilgarth
@Daniel:公正地说,他并没有具体说明太多... 也许也没有 ""。 - Paolo Falabella
@paolo:你说得对。但是假设这些字符串中的任何一个都是固定长度的,也许在30年前是正确的,但现在不再是了。 - Daniel Hilgarth
他给出了确切的字符串和所需的结果...不确定有什么大不了的。 - agradl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接