Как исключить строки комментариев при поиске по регулярному выражению? - PullRequest
0 голосов
/ 22 ноября 2010

Необходимо исключить блоки, которые расположены с регулярным выражением, когда им предшествует # и любое количество пробелов.Вот пример файла

&START   A=23  ... more data ...
                  B=24    &END
#   &START   A=34  ... more data ...
                  B=24    &END
&START   .... block 3 of data across multiple lines ....  &END
&START   .... block 4 of data across multiple lines ....  &END

Следующее регулярное выражение не исключает закомментированную запись, как я и ожидал -

(?!#\s*)&START(.+?)&END 

Желание просмотреть записи и файл для обработки,Код Python для этого (который работает хорошо, кроме строк комментариев, проходящих через него) -

f=open(filename)
data=f.read()
f.close()

pattern=re.compiler(r'(?!#\s*)&START(.+?)&END, re.DOTALL)
get_entries = pattern.findall

for entry in get_entries(data):
    # process the entry
    print entry

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

Ответы [ 3 ]

5 голосов
/ 22 ноября 2010

Пропустить строку вообще.

if line.lstrip().startswith('#'):
  continue
2 голосов
/ 22 ноября 2010

Это похоже на работу:

import re

target="""
&START   A=23  ... more data ...
                  B=24    &END
#   &START   A=C34  ... more data ...
                  B=C24    &END
&START   .... block 3 of data across multiple lines ....  &END
&START   .... block 4 of data across multiple lines ....  &END
"""

regex = re.compile("^(?!#)&START (.*?)&END",re.MULTILINE|re.DOTALL)

for s in regex.findall(target):
   print s

Возвращает:

  A=23  ... more data ...
                  B=24    
  .... block 3 of data across multiple lines ....  
  .... block 4 of data across multiple lines ....  
0 голосов
/ 22 ноября 2010

Лучше всего работать в генераторе.Использование многострочного тега (m) позволит ему искать следующую строку, пока не найдет ваш конечный тег.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...