如何让PLY忽略正则表达式的大小写?

6
我正在开发一个简单的翻译器,将SQL INSERT语句转换为数据集XML文件,以便与DbUnit一起使用。
我的当前定义如下:
def t_INSERT(token):
    r'INSERT\s+INTO'
    return token

现在,我想支持SQL的不区分大小写命令,例如,接受所有的INSERT INTOInsert Intoinsert intoiNsErT inTO都视为相同的命令。
我想知道是否有一种方法可以使用re.I来忽略大小写,或者还有其他我不熟悉的编写规则的替代方法。
2个回答

9
你可以使用(?)语法将标志注入正则表达式。尝试使用'(?i)INSERT\s+INTO',它会添加忽略大小写的标志。

2

在内部,lex.py使用re模块进行模式匹配。
如果您需要向 re.compile() 函数提供可选标志,请使用 lex 中的 reflags 选项。例如:

lex.lex(reflags=re.UNICODE)

这些信息摘自文档的4.3和4.20节。
在你的情况下,你可以将re.IGNORECASE传递给词法分析器:
import re
lex.lex(reflags=re.IGNORECASE) 

如果您以这种方式传递标志,您的代码更易读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接