从特定索引字符中删除字符

时间:2015-03-06 21:10:29

标签: c# regex string substring

我想知道如何从特定索引中删除字符串中的字符,如:

string str = "this/is/an/example"

我想删除第三个'/'中的所有字符,包括这样:

str = "this/is/an"

我尝试使用子字符串和正则表达式,但我无法找到解决方案。

4 个答案:

答案 0 :(得分:1)

使用字符串操作:

str = str.Substring(0, str.IndexOf('/', str.IndexOf('/', str.IndexOf('/') + 1) + 1));

使用正则表达式:

str = Regex.Replace(str, @"^(([^/]*/){2}[^/]*)/.*$", "$1");

答案 1 :(得分:0)

这个正则表达式是答案:^[^/]*\/[^/]*\/[^/]*。它将捕获前三个块。

var regex = new Regex("^[^/]*\\/[^/]*\\/[^/]*", RegexOptions.Compiled);
var value = regex.Match(str).Value;

答案 2 :(得分:0)

获得“this / is / an”:

string str = "this/is/an/example";
string new_string = str.Remove(str.LastIndexOf('/'));

如果你需要保留斜线:

string str = "this/is/an/example";
string new_string = str.Remove(str.LastIndexOf('/')+1);

这预计至少会有一个斜杠。如果不存在,则应事先检查它以避免异常:

string str = "this.s.an.example";
string newStr = str;
if (str.Contains('/'))
    newStr = str.Remove(str.LastIndexOf('/'));

如果它的importaint要获得第三个,请为它创建一个动态方法,就像这样。输入字符串,以及要返回的“文件夹”。在您的示例中,3将返回“this / is / an”:

    static string ReturnNdir(string sDir, int n)
    {
        while (sDir.Count(s => s == '/') > n - 1)
            sDir = sDir.Remove(sDir.LastIndexOf('/'));
        return sDir;
    }

答案 3 :(得分:0)

我认为最好的方法是创建扩展

     string str = "this/is/an/example";
     str = str.RemoveLastWord();

     //specifying a character
     string str2 = "this.is.an.example";
     str2 = str2.RemoveLastWord(".");

使用这个静态类:

  public static class StringExtension
 {
   public static string RemoveLastWord(this string value, string separator = "")
   {
     if (string.IsNullOrWhiteSpace(value))
        return string.Empty;
     if (string.IsNullOrWhiteSpace(separator))
        separator = "/";

     var words = value.Split(Char.Parse(separator));

     if (words.Length == 1)
        return value;

     value = string.Join(separator, words.Take(words.Length - 1));

     return value;
  }
}