2012-05-10 23 views
3

我正在研究从SQL INSERT语句到数据集XML文件的简单翻译器,以便与DbUnit一起使用。如何让PLY忽略正则表达式的情况?

我目前的定义是这样的:

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

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

我不知道是否有一种方法可以使用re.I,以便它可以忽略大小写,或者另一种替代方法来编写我不熟悉的规则。

回答

5

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

+0

谢谢,很高兴知道! – elias

0

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

lex.lex(reflags=re.UNICODE) 

此信息是从documentation第4.3和4.20
在你的情况下提取的,你可以通过re.IGNORECASE到词法分析器:

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