pascal中注释的正则表达式

时间:2013-02-02 10:19:22

标签: regex pascal

我在Python中实现了pascal的编译器。我需要在Pascal中找到注释的正则表达式。它应该处理所有这些类型的评论。

1)单行评论//Comment1

2)多行评论{Comment2}(*Comment3*)

请给出一个能处理所有这三种情况的正则表达式。

如果这很困难,请提供一个处理//Comment1{Comment2}的正则表达式

如果可能,我想要所有这三个的单个正则表达式。

3 个答案:

答案 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

\(\*.*?\*\)