Подтвердить что ты не робот

Использовать Python string.replace vs re.sub

Для Python 2.5, 2.6, следует ли использовать string.replace или re.sub для базовых текстовых замещений?

В PHP это было явно указано, но я не могу найти аналогичную заметку для Python.

4b9b3361

Ответ 1

До тех пор, как вы можете сделать с str.replace(), вы должны его использовать. Он избегает всех ошибок регулярных выражений (например, экранирование) и, как правило, быстрее.

Ответ 2

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

Ответ 3

Маскирование строк обычно предпочтительнее регулярного выражения, когда вы можете понять, как его адаптировать. Regex невероятно мощный, но обычно медленнее, а обычно сложнее писать, отлаживать и поддерживать.

При этом обратите внимание на количество "обычно" в вышеуказанном абзаце! Возможно (и я видел это) написать миллион строк манипуляции с строками для чего-то, что вы могли бы сделать с 20-символьным регулярным выражением. Кроме того, можно тратить драгоценное время, используя "эффективные" строковые функции для задач, которые мог бы сделать очень быстрый механизм регулярных выражений. Тогда есть ремонтопригодность: Regex может быть ужасно сложным, но иногда регулярное выражение будет проще и легче читать, чем гигантский блок процедурного кода.

Regex является фантастическим по своему предназначению: поиск сильно варьируемых игл в сильно изменяющихся стогах сена. Подумайте об этом как о точном динамометрическом ключе: это идеальный инструмент для определенного набора заданий, но он делает паршивый молот.

Некоторые рекомендации, которые вы должны соблюдать, когда не уверены, что использовать:

Если ответ на любой из этих вопросов "да", вы, вероятно, хотите манипулировать строкой. В противном случае рассмотрим регулярное выражение.

Ответ 4

Еще одна вещь, которую следует учитывать, заключается в том, что если вы выполняете довольно сложные замены, str.translate() может быть тем, что вы ищете.