【发布时间】:2014-11-07 11:40:28
【问题描述】:
我正在尝试为 PLY 创建一个 python 正则表达式,它将匹配表单的 cmets
// some comment
和
/* comment
more comment */
所以我尝试了
t_COMMENT = r'//.+ | /\*.+\*/'
但这不允许多行 cmets,当我尝试使用“点匹配所有”选项(如
)解决此问题时t_COMMENT = r'//.+ | (?s) /\*.+\*/'
它会导致 '//' 注释类型匹配多行。另外,如果我尝试使用两个单独的正则表达式,例如
t_COMMENT = r'//.+'
t_COMMENT2 = r'(?s) /\*.+\*/'
“//”注释类型仍然匹配多行,就像选择了点匹配所有选项一样。
有人知道怎么解决吗?
【问题讨论】:
-
我强烈怀疑这是一个坏主意。尝试使用复杂的正则表达式进行过多的高级(语法)解析是创建词法分析器/解析器系统的对立面。我建议你有单行注释的标记,多行开始和结束。围绕该解析器构建的语法可以丢弃在多行开头和结尾之间找到的所有输入。
-
你能根据你的想法给出答案吗?