1

我有一些字符串,就像FFS\D46_24\43_2我想返回第一个反斜杠和最后一个下划线之间的文本。在上面的例子中,我想得到D46_24\43

我尝试了下面的代码,但它抛出了超出范围的参数:

    public string GetTestName(string text)
    {
        return text.Remove(
            text.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase)
            ,
            text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase)
            );
    }
4

7 回答 7

8

第二个参数是计数,而不是结束索引。此外,隔离字符串的一部分的正确方法是Substringand not 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);
于 2012-08-06T12:15:47.750 回答
3

第二个参数不是结束索引 - 它应该是要删除的字符数。

请参阅此重载的文档

int startIndex = text.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase);
int endIndex = text.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase)

return text.Remove(startIndex, endIndex - startIndex);
于 2012-08-06T12:16:14.633 回答
1

这是正则表达式的工作。

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 );
    }
}
于 2012-08-06T12:17:19.153 回答
1

使用正则表达式:

Match re = Regex.Match("FFS\D46_24\43_2", @"(?<=\\)(.+)(?=_)");
if (re.Success)
{
    //todo
}
于 2012-08-06T12:18:22.620 回答
0

您应该使用 Substring 而不是 Remove。试试这个:

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);
    }
于 2012-08-06T12:19:48.057 回答
0
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);
于 2012-08-06T12:20:13.407 回答
0

string.Remove() 的第二个参数是要删除的元素数,而不是要删除的上索引。

http://msdn.microsoft.com/en-us/library/d8d7z2kk.aspx

编辑:正如其他人所指出的,您想使用 Substring(),而不是 Remove()

请参阅http://msdn.microsoft.com/en-us/library/system.string.substring%28v=vs.71%29.aspx

于 2012-08-06T12:20:23.827 回答