我家里没有我的代码,但我意识到我需要对某个表达式进行正则表达式替换,我想知道是否有最佳实践。
我的代码当前正在做的是搜索文件中的匹配项,从文件中取出这些匹配项(用""
替换它们),然后在处理完所有文件后,我调用.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
的每次迭代将从文件中删除匹配的表达式,只留下第一个带有我想保留的表达式的文件。
感谢您提出任何建议。
答案 0 :(得分:1)
如何使用replaceFirst()
备份第一个匹配项并使用一些char标记它。然后再次使用replaceAll()
和replaceFirst()
来回滚第一场比赛。
答案 1 :(得分:0)
Regex.Replace
有两个重载提供MatchEvaluator evaluator
,Match
代表String
返回替换re.Replace(input, m => first ? (first=false, m.Value) : "")
。
所以你可以使用像{{1}}这样的东西(但是我有一个VB程序员并且没有任何语法检查就把它放进去了。)