Python正则表达式字符串之间的多行搜索

Python正则表达式字符串之间的多行搜索,python,regex,string,Python,Regex,String,我在上一篇文章中提出的一个问题已经扩展了一点,因此我要问一个单独的问题,供那些熟悉regex的人回答 我有一个相当复杂的SQL查询语法,我希望在python格式的两个其他字符串之间找到字符串的所有实例 像这样的简单版本设置- qry = ''' with qry_1 as ( SELECT ID, NAME FROM ( ... other code... ), qry_2 as ( SELECT coalesce (table1.ID, t

我在上一篇文章中提出的一个问题已经扩展了一点,因此我要问一个单独的问题,供那些熟悉
regex
的人回答

我有一个相当复杂的SQL查询语法,我希望在python格式的两个其他字符串之间找到字符串的所有实例

像这样的简单版本设置-

qry = ''' 
with 
qry_1 as ( 
   SELECT ID, 
          NAME
   FROM   ( ... other code...
),
qry_2 as ( 
    SELECT coalesce (table1.ID, table2.ID) as ID,
           NAME
   FROM (...other code...
),
qry_3 as (
     SELECT id.WEATHER AS WEATHER_MORN,
            ROW_NUMBER() OVER(PARTITION BY id.SUN
                ORDER BY id.TIME) AS SUN_TIME,
            id.RAIN,
            id.MIST
   FROM (...other code..
)
'''
我想找到
as(
from
之间存在的文本。我尝试了很多不太有效的方法

差不多-

re.findall('\w+\s(?i)as\s\(nX(?i)from+', qry)
作为我在这里得到帮助的更大声明的一部分-

find_params = [re.findall('^\w+|(?:NAME|ID)|(?<=\.)(?:NAME|ID)', i) 
     for i in re.findall('\w+\s(?i)as\s\(nX(?i)from+', qry)]

find_params=[re.findall('^\w+|(?:NAME | ID)|(?您可以将
中的行匹配为
并尽可能少地匹配到下一个from,并捕获捕获组中介于两者之间的内容

^\S+\sas\s*\(\s*((?:\n.*)*?)\n\s*FROM\b
另一个选项是将
as
匹配,并防止以
as
作为第二个单词(如示例数据中所示)或以
FROM
开头的行交叉使用负前瞻

^\S+\sas\s*\([^\S\r\n]*((?:\n(?!\S+ as\b|\s*FROM\b).*)*)\n\s*FROM\b
注意这些模式基于示例数据,不考虑可能的嵌套结构

捕获组的值将由返回,您可以对其执行问题中的子处理

正则表达式演示 Python演示 1. 2.
我不知道为什么我的两篇帖子都因为将相关但不同的问题分开而被否决了?
\sas\s*\(\s*(?:\n.*)?)\n\s*来自\b
我知道它应该有效,但结果却是空的
[]
您是否使用了多行?请参阅,非常好!谢谢,如果我想在这些输出中搜索-类似这样的内容?
find_params=[re.findall('^\w+)(?:NAME)|(?谢谢,这是一个很大的帮助