6

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

我当前的定义如下所示:

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

现在,我想支持 SQL 的不区分大小写的命令,例如,接受所有的INSERT INTO, Insert Into,insert intoiNsErT inTO作为同一件事。

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

4

2 回答 2

9

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

于 2012-05-10T16:35:17.410 回答
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) 

如果您以这种方式传递标志,您的代码将更具可读性。

于 2017-11-03T16:44:10.270 回答