C# 为什么regex要替换我的提要字符串一次+;三次?
我这里的情况很有趣。我在一个文件夹中有一些文件,它们的第一行都有一个非常明确的字符串,我一直都知道会在那里。我想做的就是在C# 为什么regex要替换我的提要字符串一次+;三次?,c#,.net,regex,C#,.net,Regex,我这里的情况很有趣。我在一个文件夹中有一些文件,它们的第一行都有一个非常明确的字符串,我一直都知道会在那里。我想做的就是在可用的\u 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 = @"EXTE
可用的\u 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 | KEY | COURSE |课程| ID |课程| NAME | AVAILABLE | IND DATA |数据|源| KEY |课程|可用|代码| IND
我不明白为什么要用断点。我的循环只运行了12次,以匹配目录中的#个文件。我唯一的猜测是File.writealText在替换文本并重新替换之后以某种方式递归地搜索自己。如果这有道理的话。有什么想法吗?是因为courseHeaderRegex
如此明确吗
如果我将courseHeaderRegex
更改为string courseHeaderRegex=@“AVAILABLE_IND”代码>
然后我在文件中得到正确的更改
EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY
我只是想理解为什么原来的方法不起作用。我认为你的问题是你需要避开courseHeaderRegex中的|字符:
string courseHeaderRegex = @"EXTERNAL_COURSE_KEY\|COURSE_ID\|COURSE_NAME\|AVAILABLE_IND";
字符|是交替运算符,它将匹配“外部课程密钥”、“课程ID”、“课程名称”和“可用课程标识”,并用替换字符串替换它们。我认为您的问题是需要在courseHeaderRegex中转义|字符:
string courseHeaderRegex = @"EXTERNAL_COURSE_KEY\|COURSE_ID\|COURSE_NAME\|AVAILABLE_IND";
字符|是替换运算符,它将匹配“外部课程密钥”、“课程ID”、“课程名称”和“可用课程标识”,并用替换字符串替换它们。如何
string newString = File.ReadAllText(file)
.Replace(@"EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND",@"EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY");
只需使用一个简单的字符串。Replace()怎么样
string newString = File.ReadAllText(file)
.Replace(@"EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND",@"EXTERNAL_COURSE_KEY|COURSE_ID|COURSE_NAME|AVAILABLE_IND|DATA_SOURCE_KEY");
只需使用一个简单的字符串。Replace()就是这样。非常感谢。每天学习新的东西!我应该知道,考虑到我刚刚在Rubular的前一行中整理了正则表达式。和or操作员在一起,就是这样。非常感谢。每天学习新的东西!我应该知道,考虑到我刚刚在Rubular的前一行中整理了正则表达式。我唯一的猜测是File.writealText以某种方式递归地搜索自己。这不是一个好的猜测。“我唯一的猜测是File.writealText以某种方式递归地搜索自己”。那不是一个好的猜测。什么?当我可以使用很酷的正则表达式时,使用普通的旧字符串替换?你从哪里得到这些疯狂的想法?它不会写回文件。@ChristopherBruce:添加另一行:file.WriteAllText(文件,新闻字符串)代码>什么?当我可以使用很酷的正则表达式时,使用普通的旧字符串替换?你从哪里得到这些疯狂的想法?它不会写回文件。@ChristopherBruce:添加另一行:file.WriteAllText(文件,新闻字符串)代码>