代码之家  ›  专栏  ›  技术社区  ›  colithium

何时使用正则表达式与内置字符串方法?

  •  9
  • colithium  · 技术社区  · 17 年前

    似乎很多人建议,无论何时处理字符串(除了显示它们),都要始终使用正则表达式。这真的是最佳实践,还是我的错误印象?当问题只是“从本文中删除任何出现的这些单词”时,使用正则表达式似乎有点过头了。

    我想要输入,这样我就可以改进自己的代码,更好地回答其他人关于字符串操作的问题(有很多)。

    6 回复  |  直到 17 年前
        1
  •  10
  •   Cerebrus    17 年前

    String 类。

        2
  •  2
  •   Sev    17 年前

    正则表达式。Replace()方法的开销远高于String.Replace()方法。尽可能使用String.Replace(),必要时使用Regex。

    benchmark 看看时差。

        3
  •  2
  •   James Anderson    17 年前

    如果性能是一个问题,那么正则表达式对于简单的替换来说可能会非常消耗cpu。(正则表达式在复杂的搜索/转换中通常比一系列“更简单”的调用更有效)。

        4
  •  1
  •   Philippe Leybaert    17 年前

    但在许多情况下,事情并没有那么简单。有时,您会遇到可以使用标准字符串操作的情况,而正则表达式解决方案更优雅。即使vanilla字符串算法的速度快了10倍,问问自己它在特定代码中是否重要总是一个好主意(例如,如果代码没有在循环中执行)。

    我更喜欢简单正则表达式操作的可读性,而不是使用纯字符串操作的更复杂但更快的算法。

    只有我的2美分。..

        5
  •  0
  •   Simeon Pilgrim    17 年前

    我倾向于认为,如果作为字符串类的一部分,有一个专用函数可以按照你想要的方式操纵字符串,那么它应该非常接近“好”,因为正则表达式是通用的。

    但与任何主观的东西一样,如果你关心的是表现时间的不同方法。

    然后再做最容易理解的事情,并进行性能监控,以找出真正的瓶颈。

        6
  •  0
  •   Gaurav Singh    7 年前

    以下是Golang中的基准数字,我试图替换3个子字符串。

    基准 替换 2. 236 ns/op

    基准 替换 5. ns/op

    基准 替换 ns/op

    基准 正则表达式 2. ns/op

    基准 正则表达式 4457 ns/op

    基准 正则表达式 10 --- ns/op

    正如您所看到的,如果您要替换已知的子字符串,那么Replace比Regexp要好得多。 但如果你必须匹配未知的字符串或模式,那么正则表达式可能会更好。