Используйте Python string.replace против re.sub - PullRequest
55 голосов
/ 14 апреля 2011

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

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

Ответы [ 4 ]

61 голосов
/ 14 апреля 2011

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

44 голосов
/ 15 апреля 2011

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
29 голосов
/ 15 апреля 2011

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

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

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

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

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

9 голосов
/ 15 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...