【问题标题】:c# regex.replace vs regex.matches [duplicate]c# regex.replace vs regex.matches [重复]
【发布时间】:2016-11-29 05:50:06
【问题描述】:

如果您必须对每个匹配项执行一些逻辑以生成替换值,我很难决定使用哪一个,要么使用Regex.Replace,要么使用Regex.Matches

场景:读取文件(大小可能不同),然后使用正则表达式替换匹配项。每个匹配的替换值是不同的,并且是由某些逻辑生成的。

方法一:阅读完整文件,然后找到所有匹配项,然后我执行 foreach 或 for 循环并一一替换。

方法2:读取完整文件,然后使用带有MatchEvaluator的Regex.Replace方法,其中MatchEvaluator函数执行逻辑并返回替换值。

有一篇文章我想在这里链接,不知何故让我有一种不使用的感觉,Regex.Replace。链接:https://blogs.msdn.microsoft.com/debuggingtoolbox/2008/04/02/comparing-regex-replace-string-replace-and-stringbuilder-replace-which-has-better-performance/

【问题讨论】:

  • 如果您有性能问题,您应该针对您的独特问题实施自己的解决方案。所有字符串函数都适用于所有情况。例如,如果您只有小写字符,那么您可以实现更好的搜索 - 替换算法,然后为您的案例其他任何人。
  • 如果您的文件小于 1Gb,请不要担心性能(Regex.Replace 和 Regex.Matches 之间的任何收益都将是微乎其微的)。只需采用您认为更容易实施的方法即可。

标签: c# regex algorithm


【解决方案1】:

方法一:

  • 这将读取整个文件。 (检查内存消耗。
  • foreach 循环处理大数据,(更耗时。

方法2:

  • 这也会读取整个文件。
  • MatchEvaluator(肯定需要更多时间)

方法 3:

  • 逐行读取文件。 MDSN Link
  • 按照link you provided. 的检查执行string.replace()
  • 同时将每个结果附加到结果文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多