C# 替换除第一次之外的所有正则表达式匹配?

C# 替换除第一次之外的所有正则表达式匹配?,c#,.net,regex,visual-studio-2012,C#,.net,Regex,Visual Studio 2012,我在家里没有带代码,但我意识到我需要对某个表达式进行正则表达式替换,我想知道是否有最佳实践 我的代码目前正在搜索文件中的匹配项,从文件中取出这些匹配项(将它们替换为”),然后在处理完所有文件后,我调用.NETProcess类来执行一些命令行操作。具体来说,我要做的是获取一组文件并将它们复制(合并)到一个最终输出文件中。但是有一个例子,每个要合并的文件都有完全相同的第一行,我们只需要说,例如: FIRST_NAME|MIDDLE_NAME|LAST_NAME|ADDRESS 现在,第一个有这个的

我在家里没有带代码,但我意识到我需要对某个表达式进行正则表达式替换,我想知道是否有最佳实践

我的代码目前正在搜索文件中的匹配项,从文件中取出这些匹配项(将它们替换为
),然后在处理完所有文件后,我调用.NET
Process
类来执行一些命令行操作。具体来说,我要做的是获取一组文件并将它们复制(合并)到一个最终输出文件中。但是有一个例子,每个要合并的文件都有完全相同的第一行,我们只需要说,例如:

FIRST_NAME|MIDDLE_NAME|LAST_NAME|ADDRESS
现在,第一个有这个的文件是可以的。我想我会做最后的匹配,一旦文件被合并,就会替换。但我只想在第一次出现后替换该特定表达式的匹配项

那么,我读到C#对Regex外观有极好的支持?这是实现“在匹配的第一次出现后替换匹配”的正确方法吗?如果是,在给定一个示例正则表达式的情况下,您将如何实现它

我个人的解决方案是返回目录为.GetFiles的文件夹中的文件量,然后在我的
foreach(匹配的字符串文件)
中声明一个快速条件,即

if (count == directoryCount)
 do not match and replace
 count minus 1
elseif (count < directoryCount) 
 strip matching expression
if(count==directoryCount)
不匹配和替换
计数减1
elseif(计数<目录计数)
条带匹配表达式
然后,在第一次运行之后,通过
foreach
的每次迭代都会从文件中删除匹配的表达式,只留下第一个文件和我想要保留的表达式


谢谢您的建议。

Regex.Replace
有两个重载,为
匹配计算器提供了一些重载,该计算器是
匹配
返回替换字符串的代理


因此,您可以使用类似于
re.Replace(input,m=>first?(first=false,m.Value):“”)的东西
(但我是一名VB程序员,在没有任何语法检查的情况下将其放入).

Regex.Replace
有两个重载,为
MatchEvaluator-evaluator
提供重载,该重载是
匹配
上的委托,返回替换的
字符串


因此,您可以使用类似于
re.Replace(input,m=>first?(first=false,m.Value):“”)的东西
(但是我有一个VB程序员,在没有任何语法检查的情况下就把它放进去了)。

使用
replaceFirst()
来备份第一次出现的情况,并用一些字符标记它怎么样。然后再次使用
replaceAll()
replaceFirst()
回滚第一个匹配项。

使用
replaceFirst()
备份第一个匹配项并用一些字符标记它怎么样。然后再次使用
replaceAll()
replaceFirst()
回滚第一个匹配。

我认为编写合并步骤跳过每个文件栏的第一行第一行比合并文件更有效,然后必须将整个合并文件吸进一个大的
字符串中,以便能够在其上运行正则表达式。@Damien_the_unsiver我只是在前面设置了一个bool,然后在第一次遍历时将其更改为false,以便下一次遍历foreach时去掉这一行。然后,在处理完所有文件后,我会执行一个正则表达式。替换为一个空行标识符,用multiLine属性去掉空行块。我认为编写合并步骤跳过每个文件栏的第一行第一行比合并文件更有效,然后必须将整个合并文件吸进一个大的
字符串中,以便能够在其上运行正则表达式。@Damien_the_unsiver我只是在前面设置了一个bool,然后在第一次遍历时将其更改为false,以便下一次遍历foreach时去掉这一行。然后,在处理完所有文件后,我将执行一个regex.Replace,使用空行标识符删除具有multiLine属性的空行块。