c#string.remove& Regex.Match

时间:2013-06-25 21:04:35

标签: c# regex string

我有一个我正在搜索的文本文件,我想跳过每行中的10个第一个字符。

每一行以[10:16:01]开头,这就是我想要跳过的内容,我想在行中找到下一个数字并将数字加在一起。

这是我到目前为止所做的事情

foreach (string line in lines)
{
    string a = line.Remove(0, 10);
    if (a.Contains("whateverimsearchingfor"))
    {

            string resultString = Regex.Match(a, @"\d+").Value;
            int result = Int32.Parse(resultString);

        total += result
 }

提前致谢!

抱歉,当我尝试构建时,我得到:

  

ArgumentOutOfRangeException未处理   index和count必须引用字符串中的位置

它指向字符串a = line.remove(0,10)

希望这已经足够了。

3 个答案:

答案 0 :(得分:5)

问题似乎是文件中的某些行太短,因此line.Remove将失败,因为要删除的字符串中没有足够的字符。使用此代码可以跳过任何太短而无法处理的行:

foreach (string line in lines)
{
    if (line.Length < 10)
        continue;

    string a = line.Remove(0, 10);
    ...
}

或者,如果您在发布的代码下面有其他处理,即使行太短,您也想要运行:

foreach (string line in lines)
{
    if (line.Length >= 10)
    {
        string a = line.Remove(0, 10);
        ...
    }
}

答案 1 :(得分:4)

如果您只想处理带有数字的行:

foreach (string line in lines.Where(l => l.Length >= 10))

这会跳过短于10个字符的行。

ArgumentOutOfRangeException上的string.Remove是因为(MSDN):

  

startIndex或count小于零。    - 或者 - startIndex加上count指定此实例之外的位置

答案 2 :(得分:0)

我看到你已经接受了答案,但无论如何我都会留在这里。

你的问题有点模糊,听起来像正则表达不是你唯一的选择。如果您只想跳过前10个字符,可以使用子字符串并跳过正则表达式。看at this example here for sub strings.

这是一个简单的例子:

String input = "0123456789Hello World";
String sub = input.Substring(10, input.Length - 10);
Console.WriteLine(sub);

第一个参数是您要开始子字符串的位置,第二个参数是您希望从原始字符开始的字符数。

在您的代码中:

foreach(String line in lines)
{
     String sub = line.Substring(10, line.Length - 10);
}

编辑:

或者,您可以使用更简单的Substring调用。该调用将在给定索引之后返回整个字符串。

foreach(String line in lines)
{
    String sub = line.Substring(10);
}