对于Python 2.5,2.6,我应该使用string.replace
或re.sub
进行基本文本替换吗?
在PHP中,这是明确说明的,但我找不到类似于Python的注释。
答案 0 :(得分:59)
只要您可以使用str.replace()
,就应该使用它。它避免了正则表达式的所有陷阱(如转义),并且通常更快。
答案 1 :(得分:40)
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
答案 2 :(得分:29)
当你可以弄清楚如何调整它时,字符串操作通常优于正则表达式。正则表达式非常强大,但它通常更慢,通常更难编写,调试和维护。
话虽如此,请注意上段中“通常”的数量!有可能(而且我已经看到它已经完成)为一些20字符正则表达式完成的事情编写了数十亿行字符串操作。使用“高效”字符串函数浪费宝贵的时间就可以完成一个好的正则表达式引擎几乎同样快的任务。然后就是可维护性:正则表达式可能非常复杂,但有时候正则表达式比一大块程序代码更简单易读。
正则表达式的目的非常出色:在高度变化的草垛中寻找高度可变的针头。可以把它想象成一个精密扭矩扳手:它是完成一系列特定作业的完美工具,但却会造成糟糕的锤子。
- 您正在寻找高度静态的模式吗?例如,您是否要在每个逗号,管道或标签上拆分字符串?
- 资源效率是否比开发人员时间更重要?您的优先事项是什么?请记住:Hardware is cheap, programmers are expensive。
- 您是否正在使用HTML, XML, or other context-free grammars? 请勿忘记regex has limitations.
- 我的第一条经验法则:如果您在5分钟内处理问题,是否可以粗略地提出非正则表达式的想法?
如果这些问题的答案都是“是”,那么您可能需要字符串操作。否则,请考虑正则表达式。
答案 3 :(得分:9)
另一件需要考虑的事情是,如果您正在进行相当复杂的替换,str.translate()可能正是您正在寻找的。 p>