删除字符串的特定部分
本文关键字:定部 字符串 删除 | 更新日期: 2024-11-03 19:36:02
我有一些字符串,就像我想返回第一个反斜杠和最后一个下划线之间的文本FFS'D46_24'43_2
。在上面的例子中,我想得到D46_24'43
我尝试了下面的代码,但它抛出了超出范围的参数:
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);
第二个参数不是结束索引 - 它应该是要删除的字符数。
请参阅此重载的文档。
int startIndex = text.IndexOf("''", StringComparison.InvariantCultureIgnoreCase);
int endIndex = text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase)
return text.Remove(startIndex, endIndex - startIndex);
使用正则表达式:
Match re = Regex.Match("FFS'D46_24'43_2", @"(?<='')(.+)(?=_)");
if (re.Success)
{
//todo
}
这是正则表达式的工作。
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 );
}
}
您应该使用子字符串而不是删除。试试这个:
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);
字符串的第二个参数。Remove() 是要删除的元素数,而不是要删除的上索引。
见 http://msdn.microsoft.com/en-us/library/d8d7z2kk.aspx
edit:正如其他人所指出的,你想使用Substring(),而不是Remove()
见 http://msdn.microsoft.com/en-us/library/system.string.substring%28v=vs.71%29.aspx