在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"""