删除字符串的特定部分
问题描述:
我有一些字符串,就像FFS\D46_24\43_2
我想返回第一个反斜杠和最后一个下划线之间的文本。在上面的例子中的情况下,我想D46_24\43
删除字符串的特定部分
我尝试下面的代码,但它抛出参数超出范围exepction的:
public string GetTestName(string text)
{
return text.Remove(
text.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase)
,
text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase)
);
}
答
第二个参数是一个数,而不是一个结束索引。此外,隔离部分字符串的正确方法是Substring
而不是Remove
。所以你必须写它作为
var start = text.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase);
var end = text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase);
// no error checking: assumes both indexes are positive
return text.Substring(start + 1, end - start - 1);
答
第二个参数不是结束索引 - 它应该是要删除的字符数。
请参阅the documentation这个过载。
int startIndex = text.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase);
int endIndex = text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase)
return text.Remove(startIndex, endIndex - startIndex);
答
这是正则表达式的工作。
var regex = new Regex(@"\\(.+)_");
var match = regex.Match(@"FFS\D46_24\43_2");
if(match.Success)
{
// you can loop through the captured groups to see what you've captured
foreach(Group group in match.Groups)
{
Console.WriteLine(group.Value);
}
}
答
使用正则表达式:
Match re = Regex.Match("FFS\D46_24\43_2", @"(?<=\\)(.+)(?=_)");
if (re.Success)
{
//todo
}
答
您应该使用,而不是删除子串。 试试这个:
public static string GetTestName(string text)
{
int startIndex = text.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase);
int endIndex = text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase);
if (startIndex < 0 || endIndex < 0)
throw new ArgumentException("Invalid string: no \\ or _ found in it.");
if (startIndex == text.Length - 1)
throw new ArgumentException("Invalid string: the first \\ is at the end of it.");
return text.Substring(startIndex + 1,
endIndex - startIndex - 1);
}
答
string text = @"FFS\D46_24\43_2";
int startIndex = text.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase),
lastIndex = text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase);
return text.Substring(startIndex + 1, lastIndex-startIndex-1);
答
string.Remove的第二个参数()是要删除,不上指数上升到要删除的元素数量。
看到http://msdn.microsoft.com/en-us/library/d8d7z2kk.aspx
编辑:和其他人指出,要使用子串(),而不是删除()
看到http://msdn.microsoft.com/en-us/library/system.string.substring%28v=vs.71%29.aspx
...现在你有两个问题。 ;-)你正在使用'Groups [1]' - 如果输入字符串是“@”FFS \ D46-24 \ 43_2“'? – 2012-08-06 12:20:25
@DanPuzey真实而好的一点 - 只是在这种情况下提供一个例子。我会重新写它更安全。 – 2012-08-06 12:22:27