【问题标题】:Add regex string to array将正则表达式字符串添加到数组
【发布时间】:2016-03-09 20:23:33
【问题描述】:

我需要将一个正则表达式字符串添加到一个数组中,但我收到一个错误,例如“字符串无法在字符串 [] 中实现”。

这是代码:

foreach (string ss in fileLines)
{
    filelinesclean = System.Text.RegularExpressions.Regex.Replace(ss, @"\s+", " ");
    MessageBox.Show("ok");
    System.IO.File.WriteAllLines(@"C:\Users\Public\WriteLines.txt", filelinesclean);
}

【问题讨论】:

  • filelinesclean 是一个字符串,但 File.WriteAllLines 将一个 array 字符串作为其第二个参数。也许您打算使用File.WriteLine。
  • filelinesclean 是一个数组 private string[] filelinesclean;
  • 因此没有人提出可能导致内存不足的答案,您从中获得fileLines 的(大概)文件有多大?

标签: c# arrays regex string


【解决方案1】:

首先添加以下使用,这样您就不需要为所有内容输入整个命名空间。

using System.Text.RegularExpressions;
using System.IO;

它不起作用的原因是因为 File.WriteAllLines 需要 IEnumerabl<string> 或 string[],但您传递的是 string。要么使用File.AppendAllText,要么像这样在foreach 之后调用File.WriteAllLines 一次。

var lines = new List<string>();
foreach (string ss in fileLines)
{
    lines.Add(Regex.Replace(ss, @"\s+", " "));
}
MessageBox.Show("ok");
File.WriteAllLines(@"C:\Users\Public\WriteLines.txt", lines);

或者像这样使用 Linq

File.WriteAllLines(
    @"C:\Users\Public\WriteLines.txt",
    fileLines.Select(ss => Regex.Replace(ss, @"\s+", " "));

但根据您的一些 cmets,您可能需要执行以下操作

File.WriteAllLines(
    @"C:\Users\Public\WriteLines.txt",
    File.ReadLines(@"InputPath")
        .Select(ss => Regex.Replace(ss, @"\s+", " "));

由于延迟初始化会一次读取输入文件的每一行,因此请执行正则表达式替换,然后在移至下一行之前写出该行。如果您需要在一个非常大的文件上运行它,这将是可扩展的,因为它不需要整个文件一次都在内存中。

【讨论】:

    【解决方案2】:

    我不确定您的要求,但您似乎正在尝试使用字符串代替收集。此代码可能会有所帮助。

    List<string> lines = new List<string>();
    foreach (string ss in fileLines)
    {
       string filelinesclean = System.Text.RegularExpressions.Regex.Replace(ss, @"\s+", " ");
       lines.Add(filelinesclean);
    }
    System.IO.File.WriteAllLines(@"C:\Users\Public\WriteLines.txt", lines);
    

    我保留了您的代码,并添加/更新了几行代码。

    【讨论】:

    • 在循环的每次迭代中覆盖文件是没有意义的。
    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2012-12-20
    • 2020-12-27
    相关资源
    最近更新 更多