使用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()可能就是你要找的东西。