在python中创建正则表达式模式

在python中创建正则表达式模式,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个文本文件,其中包含以开头和结尾的多个SQL查询“或”。我试图创建一个正则表达式模式来捕获所有此类事件,并提取三个引号之间的所有SQL查询内容。下面是我迄今为止使用的方法。问题是,它只发现了第一次发生。如何修改代码以查找所有匹配的事件 下面是我的代码。我正在使用Python 3.6 # Example content from the text file data = """ '''test''', .................. .................. example

我有一个文本文件,其中包含以
开头和结尾的多个SQL查询“
。我试图创建一个正则表达式模式来捕获所有此类事件,并提取三个引号之间的所有SQL查询内容。下面是我迄今为止使用的方法。问题是,它只发现了第一次发生。如何修改代码以查找所有匹配的事件

下面是我的代码。我正在使用Python 3.6

# Example content from the text file
data = """
'''test''',
..................
..................
example text here('''SELECT * FROM table''').format(),
..................
..................
"""

# Creating regex pattern
regex = re.compile(r"(?<=([\"']{3}\b))(?:(?=(\\?))\2.)*?(?=\1)")

# Searching for patterns
pattern = regex.search(data)

# Printing all patterns
if pattern:
    print(pattern.group()) # prints only 'test'
更新: 我将我的正则表达式模式修改为
((?:“”“\”\“\”\”)\b)(?:(?=(\?))\2.*?(?=\1)
它适用于上述两种情况。但是,我也有代码不适用的多行模式。下面是两个示例供参考。我查看了一些已经提出的问题和。但我无法找出如何重建模式以捕获单行和多行模式。这方面有什么帮助吗我对regex完全不熟悉,我将不胜感激

"""
SELECT * from table
WHERE

A = B

"""

"""SELECT VALUES
FROM table
WHERE score = 0"""

可能您正在寻找

try
re.findall(pattern,string)
放弃
[\“']{3}
,它匹配您不想要的东西(三个不同引号的组合)。只需使用
(?:“'\'”\”\”)
。使用
re.finditer
[x.group()代表re.finditer中的x(你的正则表达式,文本)]
@WiktorStribi,re.finditer()有效!非常感谢。@code\u Sipra no,
((?:“'\'”\”\”\”\”\”\b)
等。
"""
SELECT * from table
WHERE

A = B

"""

"""SELECT VALUES
FROM table
WHERE score = 0"""