s = r'abc123d, hello 3.1415926, this is my book'
print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)
Вам не нужно escape
дважды, когда вы используете raw mode
.
Выход: ['123', '3.1415926']
Также тип возврата будет списком strings
.Если вы хотите, чтобы возвращаемый тип, как integers
и floats
, использовал map
import re,ast
s = r'abc123d, hello 3.1415926, this is my book'
print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))
Выход: [123, 3.1415926]
Я сказал бы много небольших ключей. Таким образом, можно получить точный результат, который Вы хотите в 1 вызове с минимальным усилием по сериализации.
при хранении его в другом объекте (массив, например) необходимо будет выбрать массив от кэша и затем выбрать объект, который Вы на самом деле хотите снова от того массива, плюс Вы имеют издержки сериализации/десериализации целого сложного объекта снова. В зависимости от Вашего предпочтительного языка это могло бы означать вручную писать функцию сериализации/десериализации с нуля.
Это зависит от Вашего приложения. В то время как memcached очень быстр, действительно требуется некоторое время поиска передачи и памяти запроса на запрос. Те числа увеличиваются в зависимости от того, является ли сервер на локальной машине (localhost) в локальной сети, или через широкую область. Размер Вашего кэша обычно не влияет на скорость поиска.
Так, если Ваше приложение использует МНОГО объектов на блок обработки (на запрос, метод или what-have-you), то обычно лучше определить Ваш кэш способом, который понижает общее количество хитов к кэшу, одновременно пытаясь не копировать данные кэша. Как все остальное, это - баланс.
т.е. Если у Вас есть веб-запрос, который вытягивает список сообщений в блоге, это было бы более выгодно для кэширования всего списка объектов как одного memcached ключа, а не (и это - несколько плохой пример, очевидно), кэширование массива ключей кэша для того списка, которые касаются индивидуально memcached объектов.
Чем меньше обработок из кэшированных значений, тем лучше. Так почему бы не просто сбросить их в кеш по отдельности?
Это зависит от того, что это за цифры. Если бы вы могли, например, сгруппировать их по диапазонам, то вы могли бы оптимизировать хранилище. Если бы вы могли их хешировать в карту или в хеш-таблицу и хранить эту карту, сериализованную в memcached, было бы хорошо.
Как бы то ни было, вы можете сохранить много маленьких ключей, просто убедитесь, что на плитах настроены куски небольшого размера, чтобы не тратить пространство памяти.
Я написал довольно большой анализ на http://dammit.lt/2008/12/25/memcached -for-small-objects / - в нем рассказывается, как оптимизировать memcached для хранения небольших объектов - это может пролить некоторый свет на проблему.