我试图解析一堆SQL脚本,找出它们读写的所有表。在
到目前为止,我加载了该文件,将其拆分为多个查询,并成功地解析了一些内容。在
createproc = re.compile(r"""\s*create procedure (?P<procedurename>[a-zA-Z_0-9.]+)\s*""")
droptable = re.compile(r"""\s*drop table (if exists)* (?P<tablename>[a-zA-Z_0-9.]+)\s*""")
createtable = re.compile(r"""\s*create table (if not exists)* (?P<tablename>[a-zA-Z_0-9.]+)\s*""")
createindex = re.compile(r"""\s*create index [a-zA-Z_0-9. ]*on (?P<tablename>[a-zA-Z_0-9.]+)\s*""")
altertable = re.compile(r"""\s*alter table (?P<tablename>[a-zA-Z_0-9.]+)\s*""")
inserttable = re.compile(r"""\s*insert into (?P<tablename>[a-zA-Z_0-9.]+)\s*""")
updatetable = re.compile(r"""\s*update (?P<tablename>.*?)\s* set""")
deletetable = re.compile(r"""delete.*from[\r\n\s]*(?P<tablename>.*?)[\r\n\s]+""")
虽然我确信所有这些regexp都不是最好的,尤其是最后一个让我头疼。 我有一个测试字符串:
^{pr2}$试着分析一下:
^{3}$而我却空无一人。我试了几件事,但到目前为止没有任何帮助。在
不幸的是,SQL脚本在换行符、空白和缩进方面非常不一致,所以我必须考虑所有可能发生的情况
不要将
flags
传递给search
,您需要在compile
调用中提供它们。regex对象的search
方法需要一个起始位置作为第二个参数,而不是标志。在这项工作:
我认为你必须简化你的表达式,以一个点结束,而不是指定标志
我认为问题在于}的用法。我试过你的测试没有他们,它成功了。在
re.MULTILINE
和{相关问题 更多 >
编程相关推荐