Regex 字符串操作以删除字符串中的更改行

Regex 字符串操作以删除字符串中的更改行,regex,string,python-2.7,Regex,String,Python 2.7,给定的:我有一个带有注释的SQL脚本 要求:分别分析注释和sql查询,并- 存储评论并同时删除(-)[此步骤中面临问题] 运行相应的查询[已实现] 存储注释和相应的查询结果 我已经试过- 正则表达式(即re.sub) 字符串操作以删除行更改,如- string.replace('\n','')&string=.join(string.split(“\n”) 代码片段 当前代码结果- 尝试使用正则表达式结果 尝试使用字符串。替换结果为- 更新 通过在命令中使用simpleif“QUERY”,您可以

给定的:我有一个带有注释的SQL脚本

要求:分别分析注释和sql查询,并-

  • 存储评论并同时删除(-)[此步骤中面临问题]
  • 运行相应的查询[已实现]
  • 存储注释和相应的查询结果 我已经试过-

  • 正则表达式(即re.sub)
  • 字符串操作以删除行更改,如-
    string.replace('\n','
    ')
    &
    string=
    .join(string.split(“\n”)
  • 代码片段 当前代码结果- 尝试使用正则表达式结果 尝试使用字符串。替换结果为-
    更新

    通过在命令中使用simple
    if“QUERY”,您可以检查所需的结果:

    sqlcommands = ['--', 
    '\r\n--1 QUERY FOR XVY?\r\nSELECT * from XVZ limit 10', 
    '\r\n--2 QUERY FOR PQR.\r\nSELECT * from PQR limit 10', 
    '\r\n']
    
    sqlcommands = [a for sub in [x.split('\r\n') for x in sqlcommands] for a in sub if a] # flattens the list of lists and checks if the list is empty
    
    comment = []
    
    for command in sqlcommands:
        if "QUERY" in command:
            print(command.replace('-', ''))
        if "SELECT" in command:
            comment.append(command.replace('-', ''))
    
    输出

    1 QUERY FOR XVY?
    2 QUERY FOR PQR.
    

    我想使用类似于从文件中提取查询的内容。一个查询可能跨越多行,一行中可能有多个查询。使用if语句然后替换有什么不好?例如
    if“query”in command:
    然后
    command.replace('-','')
    @albo,实际上查询或分析注释没有问题。使用3种方法(regex、string.replace、join(string.split())分析注释时,我无法筛选出查询以获得注释。您所指的注释是您在问题中提供的预期结果?例如:
    1查询XVY?2查询PQR。
    ?@Albo,正确。感谢Albo,sqlcommands实际上是一个字符串列表,在本例中类似于-['--','\r\n--1查询XVY?\r\n从XVZ限制10'中选择*,'\r\n--2查询PQR。\r\n从PQR限制10'中选择*,'\r\n']所以我想说的是,-1个XVY查询?从XVZ limit 10中选择*;列表中是否有一个字符串存储为-->\r\n--1个XVY查询?\r\n从XVZ limit 10中选择*。我们是否应该在注释和regex或split查询之间\r\n删除所有内容?除此之外,注释并不总是art with--n QUERY FORI根据您的评论更新了答案,请检查这是否做了trickThanks@Albo,您的代码确实有效,但它确实在我的代码的其他部分产生了一些其他问题。因此,我使用了类似正则表达式的-flatted_comment=re.sub(r'\r\n','',comment),效果非常好。再次感谢:)
    1 QUERY FOR XVY?
    SELECT * from XVZ limit 10;
    2 QUERY FOR PQR.
    SELECT * from PQR limit 10;
    
    --
    <br/>SELECT * from XVZ limit 10;
    <br/>SELECT * from PQR limit 10;
    <br/>
    
    --
    <br/>SELECT * from XVZ limit 10;
    <br/>SELECT * from PQR limit 10;
    <br/>
    
    1 QUERY FOR XVY?
    
    2 QUERY FOR PQR.
    
    sqlcommands = ['--', 
    '\r\n--1 QUERY FOR XVY?\r\nSELECT * from XVZ limit 10', 
    '\r\n--2 QUERY FOR PQR.\r\nSELECT * from PQR limit 10', 
    '\r\n']
    
    sqlcommands = [a for sub in [x.split('\r\n') for x in sqlcommands] for a in sub if a] # flattens the list of lists and checks if the list is empty
    
    comment = []
    
    for command in sqlcommands:
        if "QUERY" in command:
            print(command.replace('-', ''))
        if "SELECT" in command:
            comment.append(command.replace('-', ''))
    
    1 QUERY FOR XVY?
    2 QUERY FOR PQR.