相同的正则表达式给出不同的结果

时间:2018-07-26 10:25:30

标签: python regex python-3.x

这与正则表达式有关,该正则表达式试图标识SQL delete语句的不同部分。

请检查正则表达式here

DELETE\s*(?P<table_alias>[a-zA-z_0-9]*)\s*FROM\s*(?P<table_name>[a-zA-z_0-9]+)\s([a-zA-Z0-9_]*)\s*(?P<where_statement>WHERE){0,1}(\s.)*?

这是code的副本

import re

regex = r'DELETE\s*(?P<table_alias>[a-zA-z_0-9]*)\s*FROM\s*(?P<table_name>[a-zA-z_0-9]+)\s*([a-zA-Z0-9_]*)\s*(?P<where_statement>WHERE){0,1}(\s.)*?'

test_str = 'DELETE FROM my_table1 t_ WHERE id in (1,2,3)'

matches = re.finditer(regex, test_str, re.MULTILINE)

print([m.groupdict() for m in matches])

这给出了输出(也是预期的输出):

[{'table_alias': '', 'table_name': 'my_table1', 'where_statement': 'WHERE'}]

但是,当我在计算机上运行相同的代码时,会得到以下结果

[{'table_alias': '', 'table_name': 'mytable1', 'where_statement': None}]

注意:我正在64位Windows计算机上运行Python 3.6.4。 上面的repl.it链接是在python 3.6.1中执行的

编辑:问题是在正则表达式中应进行哪些更改,以使其在两个平台上都具有相同的结果。

0 个答案:

没有答案