从特定索引字符中删除字符
Remove characters from a specific index character
我想知道如何从特定索引中删除字符串中的字符,例如:
string str = "this/is/an/example"
我想删除第三个“/”中的所有字符,包括这样:
str = "this/is/an"
我尝试使用子字符串和正则表达式,但找不到解决方案。
这个正则表达式就是答案:^[^/]*\/[^/]*\/[^/]*
。它将捕获前三个块。
var regex = new Regex("^[^/]*\/[^/]*\/[^/]*", RegexOptions.Compiled);
var value = regex.Match(str).Value;
使用字符串操作:
str = str.Substring(0, str.IndexOf('/', str.IndexOf('/', str.IndexOf('/') + 1) + 1));
使用正则表达式:
str = Regex.Replace(str, @"^(([^/]*/){2}[^/]*)/.*$", "");
得到"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);
这预计至少有一个斜杠。如果 none 存在,你应该事先检查它不抛出异常:
string str = "this.s.an.example";
string newStr = str;
if (str.Contains('/'))
newStr = str.Remove(str.LastIndexOf('/'));
如果获取第三个很重要,为它创建一个动态方法,就像这样。输入字符串,以及您想要 return 编辑的 "folder"。 3 在你的例子中 return "this/is/an":
static string ReturnNdir(string sDir, int n)
{
while (sDir.Count(s => s == '/') > n - 1)
sDir = sDir.Remove(sDir.LastIndexOf('/'));
return sDir;
}
我认为最好的方法是创建一个扩展
string str = "this/is/an/example";
str = str.RemoveLastWord();
//specifying a character
string str2 = "this.is.an.example";
str2 = str2.RemoveLastWord(".");
有了这个静态 class:
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;
}
}
我想知道如何从特定索引中删除字符串中的字符,例如:
string str = "this/is/an/example"
我想删除第三个“/”中的所有字符,包括这样:
str = "this/is/an"
我尝试使用子字符串和正则表达式,但找不到解决方案。
这个正则表达式就是答案:^[^/]*\/[^/]*\/[^/]*
。它将捕获前三个块。
var regex = new Regex("^[^/]*\/[^/]*\/[^/]*", RegexOptions.Compiled);
var value = regex.Match(str).Value;
使用字符串操作:
str = str.Substring(0, str.IndexOf('/', str.IndexOf('/', str.IndexOf('/') + 1) + 1));
使用正则表达式:
str = Regex.Replace(str, @"^(([^/]*/){2}[^/]*)/.*$", "");
得到"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);
这预计至少有一个斜杠。如果 none 存在,你应该事先检查它不抛出异常:
string str = "this.s.an.example";
string newStr = str;
if (str.Contains('/'))
newStr = str.Remove(str.LastIndexOf('/'));
如果获取第三个很重要,为它创建一个动态方法,就像这样。输入字符串,以及您想要 return 编辑的 "folder"。 3 在你的例子中 return "this/is/an":
static string ReturnNdir(string sDir, int n)
{
while (sDir.Count(s => s == '/') > n - 1)
sDir = sDir.Remove(sDir.LastIndexOf('/'));
return sDir;
}
我认为最好的方法是创建一个扩展
string str = "this/is/an/example";
str = str.RemoveLastWord();
//specifying a character
string str2 = "this.is.an.example";
str2 = str2.RemoveLastWord(".");
有了这个静态 class:
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;
}
}