2016-07-11 4 views
1

Я пишу в Python, и скажем, у меня есть файл, глядя, как это:Python регулярных выражений фигурные скобки многострочные

aaa 

aaa "word" --sdsdrrr2 --sds { 

test test 
} 

aaa "word2" --sdsdd sdsd { 

    fffsd 
    ssss 
} 

aaa "word3" -sdksdld sdsd 

{ 

    sdsdd 
    sdsddd 
    sdsdddd } 

теперь я хочу, чтобы разобрать выход для «word2», включая префикс и суффикс, поэтому выход будет быть:

aaa "word2" --sdsdd sdsd { 

    fffsd 
    ssss 
} 

попытался следующий код:

f = open('/tmp/testt2') 

for res in re.findall('aaa "word2" (.*?)}', f.read(), re.S): 
    print res                         

только получил некоторые из матчей без быть ginning и окончание фигурные.

Обратите внимание:

  • Количество линий между фигурными скобками неизвестно.
  • Regex is a must
  • Позиции скользящих скобок также неизвестны (могут быть разнесены или нет, новая строка или нет и т. Д.), Как в приведенном выше примере.

Спасибо за любую помощь,

+0

Если вы копируете это регулярное выражение, вам не хватает открытия '{'. Кроме того, вам нужно [DOTALL] (https://docs.python.org/2/library/re.html#re.DOTALL) – RedX

+0

Я не уверен, но если вам нужна вся ценность, зачем использовать группу захвата? Используйте 'aaa" word2 ". *?}' –

ответ

0

Вы можете сделать это, как:

^(?=.*"word2") #^- start of the line with pos. lookahead 
[^{]+  # anything not a { 
{[^}]+}  # followed by {, anything in between and a closing } 

См a demo on regex101.com, а также a working fiddle on ideone.com.

+0

работает для word2/3, но если я хочу «слово», он возвращает все. – NoamD

+0

@NoamD: Поместите двойные кавычки вокруг слова. – Jan

+0

'^ (? =. *" Word ") [^ {] + {[^}] +}' Я думаю, этого достаточно. – bhansa