regex:从CTAS语句中查找select子句

disho6za  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(121)

我需要从CTAS SQL语句中获取选择语句。
例如)

create table table1 as select * from table2

Python代码:

rgxselect =  re.compile(r"(((?:select|with)[\s\S]*))",re.MULTILINE|re.IGNORECASE)
s = rgxselect.search(item)
    if s:
        selectclause = s.groups()[0]

这适用于第一个示例,但在括号的情况下,如以下示例

create table table1 as (select * from table2)

我想要么

(select * from table2)

select * from table2
xn1cxnb4

xn1cxnb41#

对于字体级深嵌套圆括号的情况,可以使用

\b(?:select|with)\b[^()]*(?:\([^()]*\)[^()]*)*

请参见regex demo

  • 详细信息 *:
  • \b-字边界
  • (?:select|with)-selectwith
  • \b-字边界
  • [^()]*-()之外的零个或多个字符
  • (?:\([^()]*\)[^()]*)*-零个或多个序列
  • \([^()]*\)-(+除() + )之外的零个或多个字符
  • [^()]*-()之外的零个或多个字符

相关问题