我在Python中实现了pascal的编译器。我需要在Pascal中找到注释的正则表达式。它应该处理所有这些类型的评论。
1)单行评论//Comment1
2)多行评论{Comment2}(*Comment3*)
请给出一个能处理所有这三种情况的正则表达式。
如果这很困难,请提供一个处理//Comment1
和{Comment2}
的正则表达式
如果可能,我想要所有这三个的单个正则表达式。
答案 0 :(得分:3)
评论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 :(得分:0)
单行注释:
//.*?$
多行1:
\(\*(.|[\r\n])*?\*\)
多行2:
\{(.|[\r\n])*?\}
一些解释:
$
表示行尾。
.*
表示任何字符出现0次或更多次,但它会占用您的输入字符串(取决于您的正则表达式引擎设置,即单行或多行)。为了减少贪心,我们必须使用.*?
。
(.|[\r\n])*?
也是如此。这里?
更为重要,因为如果有多个闭合括号,则需要匹配最里面的一个。同样取决于您的正则表达式引擎选项(单行与多行),可能不需要[\r\n]
部分。
答案 2 :(得分:-1)
单行注释:
//.*
多行评论 {评论2}
\{.*?\}
多行评论(评论3 )
\(\*.*?\*\)