2012-05-31 3 views
4
i="<wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x2887828> >]], [[[41, 183], 'Button', <wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x28879d0> >]]]" 

m = re.findall("<wx.(.*)> >", i) 

даст мнеRegex, найти первый - Python

["<wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x2887828> >]], [[[41, 183], 'Button', <wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x28879d0> >"] 

Однако я хочу, чтобы дать мне,

["<wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x2887828> >","<wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x28879d0> >"] 

Регулярное выражение не ищет весь путь до конца, я бы как взять все части, которые соответствуют регулярному выражению, Кто-нибудь знает, как это решить?

+2

вы пробовали вместо он будет делать (*). ленивый поиск –

ответ

7

Оператор * по-прежнему жадный. Вы можете изменить это, добавив после него ?. Также не забудьте процитировать буквальную точку.

Я также сделал группу несовпадающих, в противном случае вы не получите желаемый результат (это, кажется, проблема с исходным кодом, а):

re.findall(r"<wx\.(?:.*?)> >", i) 

Другой Possiblity будет следующим (при условии, что именно один < персонаж приходит перед первым >), которая работает быстрее, чем версия с ленивым * оператора: (. *)

re.findall(r"<wx\.[^<]*<[^<]*> >", i) 
Смежные вопросы