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)|(?谢谢,这是一个很大的帮助