我在这里遇到的有趣情况。我在一个文件夹中有一些文件,它们在第一行都有一个非常明确的字符串,我总是知道会在那里。想要我想做的真的只是|DATA_SOURCE_KEY
在后面追加AVAILABLE_IND
//regex to search for the bb_course_*.bbd files
string courseRegex = @"BB_COURSES_([C][E][Q]|[F][A]|[H][S]|[S][1]|[S][2]|[S][P])\d{1,6}.bbd";
string courseHeaderRegex = @"EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND";
//get files from the directory specifed in the GetFiles parameter and returns the matches to the regex
var matches = Directory.GetFiles(@"c:\courseFolder\").Where(path => Regex.Match(path, courseRegex).Success);
//prints the files returned
foreach (string file in matches)
{
Console.WriteLine(file);
File.WriteAllText(file, Regex.Replace(File.ReadAllText(file), courseHeaderRegex, "EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY"));
}
但是这段代码采用匹配正则表达式的原始出现,用我的替换值替换它,然后再执行 3 次。
EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY|EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY|EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY|EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY
而且我无法弄清楚为什么要使用断点。我的循环只运行了 12 次以匹配我在目录中拥有的文件数。我唯一的猜测是 File.WriteAllText 在替换文本并重新替换后以某种方式递归搜索自身。如果这是有道理的。有任何想法吗?是不是因为courseHeaderRegex
太显眼了?
如果我courseHeaderRegex
改为string courseHeaderRegex = @"AVAILABLE_IND";
然后我在我的文件中得到正确的更改
EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY
我只是想了解为什么原来的方式行不通。