Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将正则表达式字符串添加到数组_C#_Arrays_Regex_String - Fatal编程技术网

C# 将正则表达式字符串添加到数组

C# 将正则表达式字符串添加到数组,c#,arrays,regex,string,C#,Arrays,Regex,String,我需要向数组中添加一个正则表达式字符串,但出现了一个错误,如“string不能在string[]中实现” 代码如下: foreach (string ss in fileLines) { filelinesclean = System.Text.RegularExpressions.Regex.Replace(ss, @"\s+", " "); MessageBox.Show("ok"); System.IO.File.WriteAllLines(@"C:\Users\P

我需要向数组中添加一个正则表达式字符串,但出现了一个错误,如“string不能在string[]中实现”

代码如下:

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);
}

首先添加以下用法,这样就不需要为所有内容键入整个名称空间

using System.Text.RegularExpressions;
using System.IO;
它不起作用的原因是
File.writeAllines
需要一个
IEnumerabl
string[]
,但您正在传递一个
字符串。可以使用
File.AppendAllText
或在
foreach
之后调用
File.writeAllines
一次,如下所示

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);
但是根据您的一些评论,您可能希望执行以下操作

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

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

首先添加以下用法,这样您就不需要为所有内容键入整个名称空间

using System.Text.RegularExpressions;
using System.IO;
它不起作用的原因是
File.writeAllines
需要一个
IEnumerabl
string[]
,但您正在传递一个
字符串。可以使用
File.AppendAllText
或在
foreach
之后调用
File.writeAllines
一次,如下所示

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);
但是根据您的一些评论,您可能希望执行以下操作

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

由于惰性初始化会一次读取输入文件的每一行,因此请执行正则表达式替换,然后在移动到下一行之前写出该行。如果您需要在一个非常大的文件上运行此操作,那么它将是可扩展的,因为它不需要将整个文件同时存储在内存中。

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

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);
列表行=新列表();
foreach(文件行中的字符串ss)
{
字符串filelinesclean=System.Text.RegularExpressions.Regex.Replace(ss,@“\s+”,“”);
行。添加(filelinesclean);
}
System.IO.File.writeAllines(@“C:\Users\Public\WriteLines.txt”,行);

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

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

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);
列表行=新列表();
foreach(文件行中的字符串ss)
{
字符串filelinesclean=System.Text.RegularExpressions.Regex.Replace(ss,@“\s+”,“”);
行。添加(filelinesclean);
}
System.IO.File.writeAllines(@“C:\Users\Public\WriteLines.txt”,行);

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

filelinesclean
是一个字符串,但
文件。writeAllines
将字符串数组作为其第二个参数。也许您想使用
File.WriteLine
.filelinesclean是一个数组私有字符串[]filelinesclean;因此,没有人提出可能导致内存不足的答案,从中获取
文件行
的文件(大概)有多大?
文件行Clean
是一个字符串,但
文件。WriteAllines
将字符串数组作为其第二个参数。也许您想使用
File.WriteLine
.filelinesclean是一个数组私有字符串[]filelinesclean;因此,没有人提出可能导致内存耗尽的答案,从中获取
文件行的(大概)文件有多大?
?在循环的每次迭代中覆盖文件没有意义。在循环的每次迭代中覆盖文件没有意义。