2017-01-11 6 views
0

Я довольно новичок в регулярном выражении. Узор я пытаюсь соответствовать что-то вдоль линий этого:Какое будет соответствующее регулярное выражение для этого шаблона?

A= "SOME_VALUE" 
    X = 'SOME_OTHER_VALUE' 
L = "HERES_ANOTHER_VALUE"   # yes, there are some instances of non-indentation 
    c = { 
     D = "E", 
     F='G', 
     H = "I" 

    } 
    Q = "A VALUE WITH SPACES" 
    V='VALUE_WITH_KEY_V' 

Я сделал некоторые «играя» на regex101, и образец, который я придумал следующий:

[\s]*?([\w]+)[\s]*?\=[\s]*?([\'\"\,\{\w\s\}]+)[\n]+

The output on regex101

Я хочу, чтобы захватить суб-класс как одно целое значение. Однако, как видно из вывода, я не получаю желаемого результата. Кроме того, было бы здорово, если бы я мог захватить весь подкласс в качестве необязательной группы. Но я не знаю, как это сделать.

Что было бы самым эффективным регулярным выражением для вышеупомянутого шаблона?

ответ

2

Что-то вроде так должно работать: \w+\s*=\s*((\{.*?\})|(['"].*?['"])) (обратите внимание, что это требует использования в .DOTALL флаг, чтобы позволить . соответствовать новые линии, что полезно, когда вы имеете дело с классами

Пример из выражения. here

+0

Хорошо работает. Большое спасибо! Быстрый ответ на вопрос - как активировать флаг .DOTALL в python? –

+1

@RahulKulhalli 're.findall (pattern, string, re.DOTALL)' – MYGz