Python在SQL脚本的特定部分中提取行

时间:2015-06-26 14:34:05

标签: python regex

我有一堆来自sql server的存储过程脚本,我想从中提取自定义编码部分。我想抓住的区域是:

/* **************************************************************************************************************************************************** */
    /* * Begin Custom Code ******************************************************************************************************************************** */
    /* **************************************************************************************************************************************************** */

然后是:

/* **************************************************************************************************************************************************** */
    /* * End Custom Code ********************************************************************************************************************************** */
    /* **************************************************************************************************************************************************** */

所以脚本看起来像:

/* **************************************************************************************************************************************************** */
    /* * Begin Custom Code ******************************************************************************************************************************** */
    /* **************************************************************************************************************************************************** */

    SELECT col1, col2
    FROM [dbo].[table1]
    ORDER BY col1

    /* **************************************************************************************************************************************************** */
    /* * End Custom Code ********************************************************************************************************************************** */
    /* **************************************************************************************************************************************************** */

有没有办法读取文件并将这些标记之间的行写为一个单独的文件作为一个长字符串(没有标签或换行符)?

3 个答案:

答案 0 :(得分:0)

假设您可以自己阅读文本,您可能会这样做:

(灵感来自this answer

chunks = sql.replace('/*', '*/').split('*/')
relevant = [x for x in chunks if not x.startswith('/*')

答案 1 :(得分:0)

这是基本的想法

inputArray = inputFile.split('*/')
for val in inputArray:
    if not val.strip().startswith('/*'):
        print(val.strip().split("\n").join(" "))

答案 2 :(得分:0)

读取每一行并对其进行剥离。如果结果行为空或以'/ *'开头,则跳过并读取下一行。 Ohterwise附加到列表中。

sql = '''/* **************************************************************************************************************************************************** */
    /* * Begin Custom Code ******************************************************************************************************************************** */
    /* **************************************************************************************************************************************************** */

    SELECT col1, col2
    FROM [dbo].[table1]
    ORDER BY col1

    /* **************************************************************************************************************************************************** */
    /* * End Custom Code ********************************************************************************************************************************** */
    /* **************************************************************************************************************************************************** */
'''
lines = []
for line in sql.splitlines():
    line = line.strip()
    if not line or line.startswith('/*'):
        continue
    lines.append(line)

' '.join(lines)

'SELECT col1, col2 FROM [dbo].[table1] ORDER BY col1'  

使用正则表达式;

' '.join(line.strip() for line in re.sub(r'/\*.*?\*/','',sql,flags=re.DOTALL).strip().splitlines())  

'SELECT col1,col2 FROM [dbo]。[table1] ORDER BY col1'