当前位置: 首页 > 知识库问答 >
问题:

使用 Python 重新提取多行字符串的某些部分 [复制]

姜阳
2023-03-14

我一直试图在多行文本中提取SQL查询,但总是得到错误的输出。

如何在一个或三个引号之间获得文本?

注意:在第一个完整引号""""""""''''''之前和之后都可以有任何东西,我只对在引号之间找到第一个文本感兴趣。

import re

cell_text = """\
#%%sql
q = \"\"\"
select 
name, breed, sum(weight) over (partition by breed order by name) as running_total_weight
from cats 
order by breed, name
\"\"\"

f(q)
"""
print(cell_text)

我的尝试:

pat = """.*select(.*)['"].*"""
out = re.findall(pat,cell_text,flags=re.M)[0]
sql = 'select ' + out
print(sql)

# I am getting empty outputs for re.findall instead of text there.

所需输出:

input
----

#%%sql
q = """
select 
name, breed, sum(weight) over (partition by breed order by name) as running_total_weight
from cats 
order by breed, name
"""

f(q)

output
------

select 
name, breed, sum(weight) over (partition by breed order by name) as running_total_weight
from cats 
order by breed, name


input
-----
#%%sql
q = "select * from cats;"

f(q)

output
-------
select * from cats;

input
-----
q = 'select * from cats limit 2'

output
------
select * from cats limit 2

共有1个答案

仲学真
2023-03-14

您需要使用DOTALL(? s)模式,如下所示:

>>> print (re.findall(r'(?s)"""(.*?)"""', cell_text)[0])

select
name, breed, sum(weight) over (partition by breed order by name) as running_total_weight
from cats
order by breed, name

您还可以在re.findall中使用标志参数:

re.findall(r'"""(.*?)"""', cell_text, flags=re.DOTALL)

编辑:请注意,要匹配所有单引号或三引号文本,您可以交替使用此正则表达式:

r"""\"\"\"(.*?)\"\"\"|'''(.*?)'''|"(.*?)"|'(.*?)'"""

正则表达式演示

 类似资料:
  • 我有一个xml,我想提取其中的一部分。但我无法得到它。如果我使用变量并将每个键放入变量中,我可以得到那个部分,但这是一个非常漫长的过程。那幺,是否有任何简短的流程? 下面是 XML : 我想要< code>network link集合中的xml。

  • 表名称: blist 任何可以将abcd_086、087等替换为xyz_086、087等的SQL查询。需要用xyz替换serial_no列的前4个字符。请帮助!!!

  • 问题内容: 如何用另一部分替换字符串的特定部分? 输入字符串: 如何用其他方式更改字符串中的全部? 我认为我需要一个循环,但是我不确定如何使用它。 问题答案: 或者更精确地回答您的问题:

  • 我想提取所有“like string”,即。 像“%”12548“%” 例如“%” 例如“%” 例如“%” 例如“%” 我在java当我获取组时,它不会返回正确的结果。请建议。

  • 我正在寻找创建正则表达式的帮助,以便我可以用锚标签替换文本。文本来自SQL字段(VarChar(max)),格式如下: 在上面的文本中,我需要将1994年以后的所有章节替换为锚标签。例如,98、553、568和300都将被替换。下面的代码查找1994年的整个文本,例如c.98,但是我不确定如何替换该文本中的“98”。

  • 我有一个熊猫数据框,有4行4列-这里是一个简单的版本: 我想做的是把它转换成一个2*8的数据帧,每个数组都有B、C和D——所以它看起来像这样: 在阅读熊猫文档时,我尝试了以下方法: 但是给了我一个错误,我无法识别源(以 DataError:没有要聚合的数字类型 ) 接下来,我想根据一个值分割数据帧,但我认为.groupby命令可能会处理它