使用Python的string.replace与re.sub

对于Python string.replace ,我应该使用string.replace还是re.sub进行基本的文本replace?

在PHP中,这是明确表示,但我找不到类似的Python注释。

只要你可以做str.replace() ,你应该使用它。 它避免了正则expression式的所有缺陷(如转义),并且通常更快。

str.replace()应该在可能的时候使用。 这是更明确,更简单,更快。

 In [1]: import re In [2]: text = """For python 2.5, 2.6, should I be using string.replace or re.sub for basic text replacements. In PHP, this was explicitly stated but I can't find a similar note for python. """ In [3]: timeit text.replace('e', 'X') 1000000 loops, best of 3: 735 ns per loop In [4]: timeit re.sub('e', 'X', text) 100000 loops, best of 3: 5.52 us per loop 

当你可以弄清楚如何适应它时,string操作通常比正则expression式更可取。 正则expression式非常强大,但速度通常较慢, 通常更难以编写,debugging和维护。

这就是说,注意上面段落中的“通常”的数量! 这是可能的(我已经看到它完成)写了一个string操纵的数十亿行的东西,你可以用20个字符的正则expression式。 在一个好的正则expression式引擎可以做的几乎一样快的任务上,使用“高效的”string函数浪费宝贵的时间也是可能的。 然后是可维护性:正则expression式可能非常复杂,但是有时正则expression式比一大块程序代码更简单易读。

正则expression式对于它的目的是非常棒的:在高度可变的干草堆中寻找高度可变的针。 把它想象成一个精确的扭矩扳手:它是一套特定工作的完美工具,但它却使得锤子变得糟糕。

当您不确定要使用什么时,您应该遵循一些准则:

  • 你正在寻找高度静态的模式? 例如,是否要在每个逗号,pipe道或选项卡上分割一个string?
  • 资源效率比开发者时间更重要吗? 你的优先事项是什么? 记住: 硬件很便宜,程序员很贵 。
  • 你正在使用HTML,XML或其他上下文无关文法吗? 不要忘记, 正则expression式有一定的局限性。
  • 我的第一条经验法则是: 如果你在这个问题上工作了5分钟,你能不能给出一个非正则expression式的思路?

如果任何这些问题的答案是“是”,那么您可能需要string操作。 否则,考虑正则expression式。

另外要考虑的是,如果你正在做相当复杂的replace, str.translate()可能就是你要找的东西。