Вопрос о регулярном выражении - PullRequest
2 голосов
/ 23 апреля 2010

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

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

//This is an example file.
//Please help me.

#include "test.h"
int main() //main function
{
  ...
}

Что я хочуИз кода извлекаются первые две строки, т.е.

//This is an example file.
//Please help me.

Есть идеи?

Ответы [ 4 ]

5 голосов
/ 23 апреля 2010

Зачем использовать регулярные выражения?

>>> f = file('/tmp/source')
>>> for line in f.readlines():
...    if not line.startswith('//'):
...       break
...    print line
... 
2 голосов
/ 23 апреля 2010
>>> code="""//This is an example file.
... //Please help me.
...
... #include "test.h"
... int main() //main function
... {
...   ...
... }
... """
>>>
>>> import re
>>> re.findall("^\s*//.*",code,re.MULTILINE)
['//This is an example file.', '//Please help me.']
>>>

Если вам нужно только сопоставить непрерывные строки комментариев вверху, вы можете использовать следующее.

>>> re.search("^((?:\s*//.*\n)+)",code).group().strip().split("\n")
['//This is an example file.', '//Please help me.']
>>>
1 голос
/ 23 апреля 2010

это не только первые две строки комментариев, но и многострочные и // комментарии сзади.Это не то, что вам нужно.

data=open("file").read()
for c in data.split("*/"):
    # multiline
    if "/*" in c:
       print ''.join(c.split("/*")[1:])
    if "//" in c:
       for item in c.split("\n"):
          if "//" in c:
             print ''.join(item.split("//")[1:])
0 голосов
/ 23 апреля 2010

для расширения контекста на следующие соображения

  1. пробелы перед // ...
  2. пустых строк между каждой // ... строкой

import re

code = """//This is an example file.    
 a
   //  Please help me.

//  ha

#include "test.h"
int main() //main function
{
  ...
}"""

for s in re.finditer(r"^(\s*)(//.*)",code,re.MULTILINE):
    print(s.group(2))

>>>
//This is an example file.    
//  Please help me.
//  ha
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...