Рассмотрим следующие замены строки кода Python:Быстрее замена строки в Python
import re
s = 'head abc.sys!0x1234 middle defg.sys!0x1a2b tail' # this could be potentially very long
d = {'0x1234' : 'Iamshorter',
'0x1a2b' : 'Iammuchlonger' }
pat = re.compile(r'(\w+.\w+)!(0x[\d\w]+)')
while True:
m = pat.search(s)
if not m:
break
module, addr = m.groups()
start, end = m.span()
s = s[:start] + '%s!%s' % (module, d[addr]) + s[end:]
print s
Это выход
head abc.sys!Iamshorter middle defg.sys!Iammuchlonger tail
Ищу быстрее питона идиомы таким образом, что сила регулярного выражения питона может быть развязана. Я попытался использовать re.sub(), но мне было трудно сделать «repl» как функцию согласованной строки. Любое предложение очень ценится. Благодарю.
Вы уже скомпилировали свое выражение. Вероятно, вы не получите больше сока из алгоритма поиска. Возможно, вам нужно будет искать свою высокую производительность на языках более низкого уровня, таких как C, чтобы писать четный «сырой» и более быстрый шаблон соответствия. – 2013-03-22 23:55:36
Главный вопрос - почему вы ищете более быстрое решение. Упреждающая оптимизация во многих случаях переоценивается и делает ваш код чрезмерно сложным. – eandersson
@eandersson: Я разместил это как запрос на все, что я мог бы не знать, например, как мы правильно используем встроенные модули, чтобы я мог учиться у эксперта. Этот код не нужно оптимизировать, так как это просто мой скрипт, выполняющий замену подстроки. Я очень хочу учиться у экспертов python; Я не знаю, почему кто-то дал мне нить. :( –