LINUX.ORG.RU

Регулярное выражение, найти группы в которые не входит строка «sc.»


0

1

Привет,

Подскажите пожалуйста с регулярным выражением. Мне нужно чтобы вот эту строку

Python

l = (sc.get('cms_msg_vc(asd)_url','Movie url')), max_length=255, help_text=_(sc.get('cms_msg_vc_url_help','Vimeo or youtube video URL'))

разобрать на

sc.get('cms_msg_vc(asd)_url','Movie url'))
и
sc.get('cms_msg_vc_url_help','Vimeo or youtube video URL'))

Т.е. вытащить их из нее...

Я делаю так:

In [126]: re.findall('\(sc.get\([^)]+\)\)',l)

Out[126]: 
["(sc.get('cms_msg_vc_url_help','Vimeo or youtube video URL'))"]

In [127]: 

Но выдается только второе выражение, потому что в первом есть скобки внутри...

Подскажите как написать такое регулярное выражение которое выбирало бы все подстроки у которых нет внтутри sc.get. Или чтобы это не реагировало на скобки, просто если я сделаю немного по другому, то будет браться вся строка... Смотрите:

In [130]: re.findall('\(sc.get\(.+\)\)',l)

Out[130]: ["(sc.get('cms_msg_vc(asd)_url','Movie url')), max_length=255, help_text=_(sc.get('cms_msg_vc_url_help','Vimeo or youtube video URL'))"]

Т.е. мне нужно выдернуть из нее аргументы метода sc.get()...

Спасибо



Последнее исправление: moskrc (всего исправлений: 2)

не регэкспы, но забавно

#!/usr/bin/env python

smth = "l = (sc.get('cms_msg_vc(asd)_url','Movie url')), max_length=255, help_text=_(sc.get('cms_msg_vc_url_help','Vimeo or youtube video URL'))"

smth = 'do_smth('+smth+')'

class sc:
    @classmethod
    def get(self, *args):
        return 'sc.get' + repr(args)

def _(s):
    return s

def do_smth(l, max_length, help_text):
    print l
    print help_text

eval(smth)
anonymous
()

кстати если после плюсега или звездочки поставить знак вопроса, то оно уменьшет его жадность

anonymous
()
Ответ на: комментарий от anonymous

ВАУ!!!! Спасибо вам огромное!!! Работает! Ура!

moskrc
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.