替换每次出现的正则表达式匹配EXCEPT第一次?

时间:2013-07-31 02:24:30

标签: c# .net regex visual-studio-2012

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

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

FIRST_NAME|MIDDLE_NAME|LAST_NAME|ADDRESS

现在,第一个文件没问题。而且我认为我将进行最后一场比赛并在合并文件后进行替换。但我只想在第一次出现之后替换该特定表达式的匹配。

所以,我读到C#对Regex背后的外观有很好的支持?这是实现“在第一次匹配后替换匹配”的正确方法吗?如果是这样,如果给出正则表达式示例,您将如何实现它?

我自己的个人解决方案是使用Directory.GetFiles返回文件夹中的文件数量,然后在我的foreach (string file in matches)中我会声明一个快速的条件

if (count == directoryCount)
 do not match and replace
 count minus 1
elseif (count < directoryCount) 
 strip matching expression

然后在第一次运行后通过foreach的每次迭代将从文件中删除匹配的表达式,只留下第一个带有我想保留的表达式的文件。

感谢您提出任何建议。

2 个答案:

答案 0 :(得分:1)

如何使用replaceFirst()备份第一个匹配项并使用一些char标记它。然后再次使用replaceAll()replaceFirst()来回滚第一场比赛。

答案 1 :(得分:0)

Regex.Replace有两个重载提供MatchEvaluator evaluatorMatch代表String返回替换re.Replace(input, m => first ? (first=false, m.Value) : "")

所以你可以使用像{{1}}这样的东西(但是我有一个VB程序员并且没有任何语法检查就把它放进去了。)