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]
Ну, я думаю, что это вызвано тем, что clear
не считался допустимой операцией на очереди, priority_queue или стеке (между прочим, двухсторонняя очередь не и адаптер, но контейнер).
единственная причина использовать контейнерную очередь адаптера вместо контейнерной двухсторонней очереди состоит в том, чтобы прояснить, что Вы выполняете только работы с очередями и никакие другие операции. (от sgi страницы на очереди)
Поэтому при использовании очереди, все, что можно сделать, продвинуть/вытолкать элементы; очистка очереди может рассматриваться как нарушение понятия FIFO. Следовательно, если необходимо очистить очередь, возможно, это не действительно очередь, и необходимо лучше использовать двухстороннюю очередь.
Однако эта концепция вещей немного ограничена, и я думаю, очищая очередь, как Вы делаете достаточно справедливо.
Двухсторонняя очередь имеет ясный (). Посмотрите, например, http://www.cplusplus.com/reference/stl/deque/clear.html .
Однако очередь не делает. Но почему Вы предпочли бы очередь двухсторонней очереди, так или иначе?
единственная причина использовать контейнерную очередь адаптера вместо контейнерной двухсторонней очереди состоит в том, чтобы прояснить, что Вы выполняете только работы с очередями и никакие другие операции.
( http://www.sgi.com/tech/stl/queue.html )
, Таким образом, я предполагаю ясный (), не работа с очередями, затем.
Я сказал бы, что это - потому что контейнерные адаптеры не являются контейнерами.
Вы CAN очищаете очереди (и станд.:: стек и priority_queue), пока Вы наследовались ему. Контейнер намеренно оставляют защищенным для разрешения этого.
#include <queue>
using namespace std;
class clearable_queue : public queue<int>
{
public:
void clear()
{
// the container 'c' in queues is intentionally left protected
c.clear();
}
};
int main(int argc, char** argv)
{
clearable_queue a;
a.clear();
}
Я думаю, что это зависит от реализации - до недавнего времени, Microsoft STL не имела ясным на нескольких контейнерах. (это делает теперь, например, этот быстрый результат Google )
Однако ясный () часто просто вызов для стирания (начните (), конец ()), так реализуйте собственный эквивалент и использование это вместо этого.
я думаю, что стандарт относится для очистки как стирающийся по диапазону итератора, таким образом, вышеупомянутое - то, что обеспечит большинство реализаций. (, например, Dinkumware )
станд.:: очередь, станд.:: двухсторонняя очередь и станд.:: priority_queue являются контейнерными адаптерами и только обеспечивают небольшое количество методов для доступа к базовому контейнеру.
можно очистить базовый контейнер, пока можно получить доступ к нему. Чтобы сделать это, создайте базовый контейнер, чтобы передать в apadptor конструктору. Например:
std::deque< int > d;
std::queue< int > q( d );
... time passes ...
d.clear();
Редактирование: дополнительная информация
я должен был также попросить Вас действовать осторожно здесь, поскольку вызывающие методы для базового контейнера могут повредить предположения, сделанные адаптером. В этом отношении способ, которым Вы в настоящее время очищаете очередь, кажется предпочтительным.