0

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

1) 单行注释 //Comment1

2) 多行注释{Comment2}(*Comment3*)

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

如果这很困难,请给出一个正则表达式来处理//Comment1{Comment2}

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

4

3 回答 3

4

评论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))
于 2013-02-02T10:27:09.673 回答
0

单行注释:

//.*?$

多行1:

\(\*(.|[\r\n])*?\*\)

多行 2:

\{(.|[\r\n])*?\}

一些解释:

$表示行尾。

.*表示任何字符出现 0 次或多次,但它会吃掉您的输入字符串(取决于您的正则表达式引擎设置,即单行或多行)。为了减少贪婪,我们必须使用.*?.

关于(.|[\r\n])*?. 这里?更重要,因为如果有多个右大括号,则需要匹配最里面的一个。再次取决于您的正则表达式引擎选项(单行与多行),[\r\n]可能不需要该部分。

于 2013-02-02T10:27:05.617 回答
-1

单行注释:

//.*

多行评论{Comment2}

\{.*?\}

多行评论( Comment3 )

\(\*.*?\*\)
于 2013-02-02T10:25:09.223 回答