【发布时间】:2015-05-15 06:20:24
【问题描述】:
我正在尝试用 python 编写一个简单的词法分析器。 我正在使用正则表达式来做到这一点。 所以,我需要一个匹配多行注释的正则表达式:
/* first line.
the second line
The last line. */
通过使用这种模式:
pattern = r"/\*.*\*/"
并用
编译它regex = re.compile(pattern,re.DOTALL)
它有效。
现在,我不会使用re.DOTALL,因为这也适用于单引号字符串。
有没有办法编译这个表达式以便在没有 re.DOTALL? 的情况下工作
【问题讨论】:
-
使用包含点和换行符的字符类。
-
你需要转义星号。
-
你可能想要
r'/\*.*?\*/';注意.*?而不是.*。这将使正则表达式为您提供可能的最短匹配,而不是可能的最长匹配。在/* a */ b /* c */之类的输入上尝试一下...我猜你想要两个匹配,而不是一个。 -
您能否详细说明 dotall 和单引号字符串有什么问题?如果你试图解析 c 风格的 cmets,这不是办法。