如何让PLY忽略正则表达式的情况?

时间:2012-05-10 16:04:31

标签: python regex ply

我正在研究一个简单的翻译器,从SQL INSERT语句到数据集XML文件,与DbUnit一起使用。

我目前的定义如下:

def t_INSERT(token):
    r'INSERT\s+INTO'
    return token

现在,我想支持SQL的不区分大小写的命令,例如,接受所有INSERT INTOInsert Intoinsert intoiNsErT inTO同样的事情。< / p>

我想知道是否有办法让PLY使用re.I以便忽略这种情况,或者另一种方法来编写我不熟悉的规则。

2 个答案:

答案 0 :(得分:6)

您可以使用(?)语法将标志注入到regexp中。试试'(?i)INSERT\s+INTO',它会添加标志以忽略大小写。

答案 1 :(得分:0)

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

lex.lex(reflags=re.UNICODE)

此信息摘自documentation第4.3和4.20节
在您的情况下,您可以将re.IGNORECASE传递给词法分析器:

import re
lex.lex(reflags=re.IGNORECASE)