我正在用 Python 实现 pascal 的编译器。我需要在 Pascal 中找到注释的正则表达式。它应该处理所有这些类型的评论。
1) 单行注释 //Comment1
2) 多行注释{Comment2}(*Comment3*)
请给出一个可以处理所有这 3 种情况的正则表达式。
如果这很困难,请给出一个正则表达式来处理//Comment1
和{Comment2}
如果可能的话,我想要所有这三个的一个正则表达式。
评论1:
//(.*?)
注释 2(用 编译re.DOTALL
):
\{(.*?)\}
注释 3(用 编译re.DOTALL
):
\(\*(.*?)\*\)
然后你可以在 python 代码中将它们组合在一起:
comments = []
comments.append(re.findall("//(.*?)", subject))
comments.append(re.findall(r"\{(.*?)\}", subject, flags=re.DOTALL))
comments.append(re.findall(r"\(\*(.*?)\*\)", subject, flags=re.DOTALL))
单行注释:
//.*?$
多行1:
\(\*(.|[\r\n])*?\*\)
多行 2:
\{(.|[\r\n])*?\}
一些解释:
$
表示行尾。
.*
表示任何字符出现 0 次或多次,但它会吃掉您的输入字符串(取决于您的正则表达式引擎设置,即单行或多行)。为了减少贪婪,我们必须使用.*?
.
关于(.|[\r\n])*?
. 这里?
更重要,因为如果有多个右大括号,则需要匹配最里面的一个。再次取决于您的正则表达式引擎选项(单行与多行),[\r\n]
可能不需要该部分。
单行注释:
//.*
多行评论{Comment2}
\{.*?\}
多行评论( Comment3 )
\(\*.*?\*\)