Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 为什么regex要替换我的提要字符串一次+;三次?_C#_.net_Regex - Fatal编程技术网

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(文件,新闻字符串)