这个模式有一个较短的正则表达式

时间:2017-10-19 15:47:22

标签: python regex

要找出哪些提交的SQL查询以LIMIT子句结尾,请使用以下正则表达式:

re_end_has_limit = re.compile(
    r'LIMIT\s+(\d+|\(\d+\)|\(\s+\d+\)|\(\s+\d+\s+\))($|;$|\s+;$|\s+;\s+$)', 
    re.IGNORECASE)

这符合以下&按预期工作。它匹配以下内容:

LIMIT 1
LIMIT (1)
LIMIT ( 1 )
LIMIT 1;
LIMIT (1);
LIMIT ( 1 );
LIMIT 1 ;
LIMIT (1) ;
LIMIT ( 1 ) ;
LIMIT 1 ; 
LIMIT (1) ; 
LIMIT ( 1 ) ; 

注意:最后3个条目包含尾随空格字符。

然而,看看正则表达式,我觉得有一种方法可以把它写得更短但是还没有能够解决它。

3 个答案:

答案 0 :(得分:1)

怎么样:

LIMIT(\s+\d+|\s*\(\s*\d+\s*\))\s*;?\s*$

答案 1 :(得分:0)

这也是一个选择:

LIMIT\s*(\()?\s*\d+\s*(?(1)\))\s*;?\s*$

regex101

而不是使用或(|),就像接受的答案一样,它使用if((?(1)...)

答案 2 :(得分:-1)

我对SQL查询不熟悉,但查看您的示例我认为这应该可以找到所有LIMIT子句:

re_end_has_limit = re.compile(r'LIMIT[ \(]+\d', re.g)