从字符串中删除前面的字符?

Posted

技术标签:

【中文标题】从字符串中删除前面的字符?【英文标题】:Remove front characters from a string? 【发布时间】:2013-10-17 19:24:34 【问题描述】:

从字符串开头删除几个字符的最佳方法是什么?

sName = "IMG: Testing again"  
sName = "TXT: This is amazing"

所以删除 IMG: 和 TXT.. 等...

所以我可以拥有这个?

sName = "Testing again"   
sName = "This is amazing"

【问题讨论】:

你试过什么? How To Ask 您有要删除的前缀列表吗? 你真的应该先用谷歌搜索一下,这种问题已经被问过一百万次了,这里不应该再问了。 【参考方案1】:

如果它总是四个字符,你可以做到。 sName = sName.Substring(5)

【讨论】:

会删除前三个字符并保留其余字符吗? 前四个字符从零开始,但是是的 这会删除前 3 个字符,而不是前 4 个。 更不用说用户也想删除空间,所以你应该使用sName.Substring(5) 来获得OP示例中的结果。 @RyanSchlueter:参数是startIndex - 第一个包含。 OP 是对的 - 这将删除前三个字符,因为您从第四个字符开始。【参考方案2】:

我个人喜欢使用简单的regular expression 来完成此类任务。

var result = Regex.Replace(input, @"^[A-Z]+:\s*", "");

这与它将删除的其他方法的语义略有不同,因此这里解释了匹配项(另请参阅regular expression quick reference)。

^         # anchor match to start of input
[A-Z]+    # match one or more capital English-alphabet characters
:         # match a colon
\s*       # match zero or more spaces

因此,这种方法还可以匹配“HELLOWORLDILOVEYOU:said Fred”之类的输入,并去掉“TXT:    Wut?”中多余的前导空格。

【讨论】:

@zimdanen 除了没有 - I'm not solving nqueens ;) 哎呀,看起来很有趣。 @zimdanen 我什至无法理解作者是如何开始如此疯狂的!我同意正则表达式可能会被过度使用,而且我已经看到了一些糟糕的变态。如果 1) 没有更合适的现有解析工具,我通常会感到安全; 2)我可以将正则表达式结构放在一行上; 3) 不用看笔记,第二天就能看懂。【参考方案3】:

假设您始终使用TYPE: Text 格式,并且您想要Text,请使用:

int index = sName.IndexOf(':') + 2; // two:  one for the colon and one for the space
sName = sName.Substring(index);

这当然可以放在一行中;为了清楚起见,我将其分为两部分。

你也可以为一般情况做一个扩展方法:

public static string SubstringAfter(this string str, string sequence)

    int index = str.IndexOf(sequence);
    if (index > -1)
    
        return str.Substring(str.IndexOf(sequence) + sequence.Length);
    
    return str;

这让你可以这样做:

sName = sName.SubstringAfter(": ");

【讨论】:

【参考方案4】:

如果它是固定格式,我建议您进行拆分。查看代码。拆分后第一个索引将拥有您的项目。

var sName = sName.Split( new char[] ':')[1].Trim();

【讨论】:

【参考方案5】:
 sName = sName.Remove(0,5); //simple but not perfect way

已编辑:

 sName= sName.Split(':')[1]; //For splitting by ':'
 sName = sName.Remove(0,1); //For the space, or use sName.Trim();

【讨论】:

这只会删除前 3 个字符,在示例中,用户想要删除前 5 个字符(包括空格)。【参考方案6】:

你可以使用

sName = sName.SubString(4, sname.Length)

它将从第4个位置到字符串的最后一个位置的子字符串。

【讨论】:

以上是关于从字符串中删除前面的字符?的主要内容,如果未能解决你的问题,请参考以下文章

C# 按指定数量从前面或者后面删除字符串

Shell基础

从字符串中删除不匹配的括号

删除数字,然后从字符串的开头删除一个空格

从字符串中的多个数字中删除前导零? [C++]

根据特定字符删除字符串的前面部分。 (\)