1

我正在处理一项任务,我在其中生成从文本文件读取的字符串对象数组。我不能使用正则表达式 \W 运算符,因为如果一个单词包含撇号 (') 或连字符 (-) 作为单词的一部分,则必须包含它。\W 在这些标记上分裂。但是,我需要它拆分除字母以外的所有其他内容,包括数字。所以我的字符串应该包括 az,AZ,-,' 格式。

我的代码在下面,它给了我几乎正确的输出,但我在数组中有空单元格,它正在读取行尾(或新行)。我不知道如何在保留我拥有的拆分的同时排除那些 (\n\r)。建议?

try
{
    using (StreamReader reader = new StreamReader("file.txt"))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            string[] words = SplitWords(line.ToLower());
            foreach (string aString in words)
            {
                Console.WriteLine(aString);
            }
        }
    }
}
catch (Exception e)
{
    Console.WriteLine("The file could not be read:");
    Console.WriteLine(e.Message);
}
static string[] SplitWords(string lines)
{
    return Regex.Split(lines, @"[^-'a-zA-Z]");
}
4

2 回答 2

1

你可以用一点 Linq 来做到这一点。使用它来排除任何空字符串:

static string[] SplitWords(string lines)
{
    return Regex.Split(lines, @"[^-'a-zA-Z]")
                .Where(s => s.Length > 0)
                .ToArray();
}

或者排除任何仅包含空格的字符串:

static string[] SplitWords(string lines)
{
    return Regex.Split(lines, @"[^-'a-zA-Z]")
                .Where(s => !s.All(Char.IsWhiteSpace))
                .ToArray();
}
于 2013-11-04T06:57:09.793 回答
1

尝试这个

return Regex.Split(lines, @"[^-'a-zA-Z]")
                              .Where(x=>!string.IsNullOrWhiteSpace(x)).ToArray();

使用IsNullOrWhiteSpace和 linq 仅将匹配元素提取到新数组

于 2013-11-04T06:57:26.943 回答