C# 将正则表达式字符串添加到数组
我需要向数组中添加一个正则表达式字符串,但出现了一个错误,如“string不能在string[]中实现” 代码如下: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
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;因此,没有人提出可能导致内存耗尽的答案,从中获取文件行的(大概)文件有多大??在循环的每次迭代中覆盖文件没有意义。在循环的每次迭代中覆盖文件没有意义。