2014-11-18 3 views
-2

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

VERSION.PROGRAM:program_name 
VERSION.SUBPROGRAM:sub_program_name 

Моя цель заключается в, учитывая progra_name, извлекать sub_program_name для каждого блока текста I упомянутое выше.

У меня есть следующая функция, которая находит, если текст на самом деле существует, но не печатает sub_program_name:

def find_subprogram(program_name): 
    regex_string = r'VERSION.PROGRAM:%s\nVERSION.SUBPROGRAM:.' % program_name 
    with open('file.txt', r) as f: 
    match = re.search(regex_string, f.read(), re.DOTALL|re.MULTILINE) 
     if match: 
      print match.group() 

Я ценю помощь или советы. Thanks

ответ

1

Если вы хотите найти несколько строк, то вы не хотите использовать модификатор MULTILINE. Что это значит, он рассматривает каждую строку как свою отдельную сущность, которую нужно сопоставить с началом и концом.

Вы также не используете правильные методы согласования регулярных выражений. Вы должны посмотреть, как правильно использовать регулярное выражение.

Для сопоставления любых символов, используя (.*) не %s.

Вот example

Использование VERSION\.PROGRAM:YOURSTRING\nVERSION\.SUBPROGRAM:(.*) будет соответствовать группы правильно

re.compile('VERSION\.PROGRAM:%s\nVERSION\.SUBPROGRAM:(.*)'%(re.escape(yourstr))) 
+0

Но я не хочу совпадать с любым символом, я хочу, чтобы он соответствовал блоку текста, который содержит переменную имени программы. Спасибо за помощь. – besty

+0

@ user3263140 Вы могли бы привести пример? –

+0

Да. Например, файл содержит: VERSION.PROGRAM: PROGRAM_1 VERSION.SUBPROGRAM: sub_program_name VERSION.PROGRAM: PROGRAM_2 VERSION.SUBPROGRAM: sub_program_name; То, что я хочу, это только имя_подпрограммы PROGRAM_2, поэтому я использую% s в строке. Используя конкатенацию строк, я получаю те же результаты, r'blabla '+ program_name + r'blabla', но вместо этого выбираю% s. – besty

2

У вашего регулярного выражения есть опечатка, он ищет PRGRAM.

+0

Да. Благодарю. К сожалению, это была только ошибка копирования. – besty

Смежные вопросы