仅匹配换行符

时间:2013-07-24 19:30:39

标签: c# regex newline

我有一个文本文件,其中包含由换行符分隔的数据行。我要做的是计算文件中的行数,不包括仅作为换行符的行数。

我正在尝试使用正则表达式来查看读取的每一行,如果它以换行符开头,不包括在我的行计数中,但我似乎无法让它工作。我已经到处搜索了如何做到这一点没有结果。

这是我为了尝试这样做而编写的方法:

public int LineCounter()
{
    StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt");
    int lineCount = 0;
    string line;

    while ((line = myRead.ReadLine()) != null)
    {
        string regexExpression = @"^\r?\n";
        RegexOptions myOptions = RegexOptions.Multiline;
        Match stringMatch = Regex.Match(line, regexExpression, myOptions);
        if (stringMatch.Success)
        {
        }
        else 
        {
            lineCount++;
        }
    }
    return lineCount;
}

我尝试更改SinglelineMultiline之间的RegexOptions,我尝试将"\r|\n|\r\n"放入模式匹配中,我尝试删除^从表达,但我似乎无法让它工作。无论我做什么,我的lineCount总是最终成为文件中的总行数,包括换行符。

我显然忽略了一些显而易见的事情,但我还不熟悉C#语言,看看有什么不对。一切看起来应该对我有用。有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:4)

使用LINQ使其成为单行计数器:

private int count(string filePath)
{
    string[] lines = File.ReadAllLines(filePath);
    return lines.Count(r => !String.IsNullOrWhiteSpace(r));
}

这也将排除其中包含空格的行。 如果要计算空格行数,可以更改为String.IsNullOrEmpty(r)

答案 1 :(得分:1)

最简单的方法是计算文件中的行数:

private static int LineCounter(string filePath)
{
    string[] lines = File.ReadAllLines(filePath);
    return lines.Length;
}

答案 2 :(得分:1)

myRead.ReadLine()正在删除换行符。如果一行是空的,那么ReadLine()将返回一个空字符串。

while ((line = myRead.ReadLine()) != null)
{
    if (line.Length == 0)
    {
        lineCount++;
    }
}

oakio给了我一个主意:

lineCount = File.ReadAllLines(filePath).Count((line) => line.Length > 0);

答案 3 :(得分:1)

尝试稍微更改代码以执行此类操作(删除正则表达式)。 Readline函数将从它返回的行中删除\ n字符。因此,如果您看到一个空的非空字符串,那么您实际上正在查看您要查找的内容。此外,您还希望使用using语句包装StreamReader,以确保在发生灾难性事件时文件已关闭。

注意:此代码也计算仅包含空格的行。听起来就像你的描述一样,这就是你想要的。

public int LineCounter()
    {
        using (StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt"))
        {
            int lineCount = 0;
            string line;

            while ((line = myRead.ReadLine()) != null)
            {
                if (line.Count() != 0)
                {
                    lineCount++;
                }
            }
        }

        return lineCount;
    }

答案 4 :(得分:0)

您不需要RegEx来执行此操作。只需检查该行是否为空。

public int LineCounter()
{
    StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt");
    int lineCount = 0;

    while (!myRead.EndOfStream)
    {
       string line = myRead.ReadLine();
       if (!string.IsNullOrWhiteSpace(line))
         lineCount++;
    }

    myRead.Close();

    return lineCount;
}