Regex 字符串操作以删除字符串中的更改行
给定的:我有一个带有注释的SQL脚本 要求:分别分析注释和sql查询,并-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”,您可以
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.