我是python的新手,我正在尝试使用正则表达式来生成FORTRAN代码的文档。我必须阅读在注释中声明的子程序名称以及用实际代码编写的子程序名称。
评论的代码如下所示:
C
C ....FEW MORE COMMENTS ABOVE
C
C
C SUBROUTINE ( X ,\n
C Y,\n
C Z)
C
C-----------------------------------
然后是实际代码:
SUBROUTINE ( X, \n
Y, \n
Z \n
)
我无法弄清楚如何阅读实际代码SUBROUTINE声明。 我对注释代码的正则表达式是这样的:
re.compile(r"C+ SUBROUTINE (?P<comment>.*?) \nC\n",re.DOTALL)(this works fine)
但我的实际代码的正则表达式与上面的正则表达式相同:
re.compile(r" ^(?!C)SUBROUTINE (?P<comment>.*?) \)")
请纠正我。
答案 0 :(得分:0)
您正在使用lookahead assertion (?!C)
,您应该使用lookbehind断言:
re.compile(r" ^(?<!C )SUBROUTINE (?P<comment>.*?) \)")
请注意,Python中的lookbehind断言需要固定宽度,因此只有在C
和SUBROUTINE
之间只有一个空格字符时,此方法才有效。