我需要清理一大堆字符串
35653_3100552_26952012_cmp.xml.gz
35653_3100552_26952012_cmp_delta.xml.gz
35653_3100552_26952012_cmp_deltatemplate.txt.gz
35653_3100552_26952012_cmp_template.txt.gz
35653_3100552_26952030_cmp.xml.gz
35653_3100552_26952030_cmp_delta.xml.gz
35653_3100552_26952030_cmp_deltatemplate.txt.gz
35653_3100552_26952030_cmp_template.txt.gz
35653_3100552_26952044_cmp.xml.gz
35653_3100552_26952044_cmp_delta.xml.gz
35653_3100552_26952044_cmp_deltatemplate.txt.gz
35653_3100552_26952044_cmp_template.txt.gz
35653_3100552_26952063_cmp.xml.gz
35653_3100552_26952063_cmp_delta.xml.gz
35653_3100552_26952063_cmp_deltatemplate.txt.gz
35653_3100552_26952063_cmp_template.txt.gz
35653_3100552_26952075_cmp.xml.gz
35653_3100552_26952075_cmp_delta.xml.gz
35653_3100552_26952075_cmp_deltatemplate.txt.gz
35653_3100552_26952075_cmp_template.txt.gz
35653_3100552_26952086_cmp.xml.gz
35653_3100552_26952086_cmp_delta.xml.gz
35653_3100552_26952086_cmp_deltatemplate.txt.gz
35653_3100552_26952086_cmp_template.txt.gz
35653_3100552_26952105_cmp.xml.gz
35653_3100552_26952105_cmp_delta.xml.gz
35653_3100552_26952105_cmp_deltatemplate.txt.gz
35653_3100552_26952105_cmp_template.txt.gz
我只想保留以cmp.xml.gz
结尾的那些
我要删除的所有其他内容以及删除空白空间。
我试过这个35653(.*)cmp_delta.xml.gz
,但这只是选择从第二行到最后一行的所有内容。
所以我的问题是,我可以使用哪个正则表达式删除不以cmp_delta.xml.gz
结尾的每一行?
顺便说一句,我将在Coda中使用这个正则表达式。
由于
更新
在下面的答案中尝试了Kendall和Key提供的正则表达式,这是Coda的结果
35653_3100552_26952012_cmp.xml.gz.lmp
.lmp
35653_3100552_26952012_cmp_deltatemplate.txt.gz.lmp
35653_3100552_26952012_cmp_template.txt.gz.lmp
35653_3100552_26952030_cmp.xml.gz.lmp
.lmp
35653_3100552_26952030_cmp_deltatemplate.txt.gz.lmp
35653_3100552_26952030_cmp_template.txt.gz.lmp
35653_3100552_26952044_cmp.xml.gz.lmp
.lmp
35653_3100552_26952044_cmp_deltatemplate.txt.gz.lmp
35653_3100552_26952044_cmp_template.txt.gz.lmp
35653_3100552_26952063_cmp.xml.gz.lmp
.lmp
35653_3100552_26952063_cmp_deltatemplate.txt.gz.lmp
35653_3100552_26952063_cmp_template.txt.gz.lmp
35653_3100552_26952075_cmp.xml.gz.lmp
.lmp
35653_3100552_26952075_cmp_deltatemplate.txt.gz.lmp
35653_3100552_26952075_cmp_template.txt.gz.lmp
35653_3100552_26952086_cmp.xml.gz.lmp
.lmp
35653_3100552_26952086_cmp_deltatemplate.txt.gz.lmp
35653_3100552_26952086_cmp_template.txt.gz.lmp
35653_3100552_26952105_cmp.xml.gz.lmp
.lmp
35653_3100552_26952105_cmp_deltatemplate.txt.gz.lmp
35653_3100552_26952105_cmp_template.txt.gz.lmp
答案 0 :(得分:2)
正则表达式在默认模式下不会匹配多行,因为.
与换行符不匹配。它匹配的唯一方法是正则表达式处于“单行”模式,这意味着.
匹配换行符。
如果Coda允许,请关闭单线模式(这与打开多线模式不同;正则表达式既可以使用两种模式,也可以两种都不使用。)
如果Coda没有提供更改单行标记的选项,您可以使用.
模仿[^\r\n]
。
35653[^\r\n]*cmp_delta\.xml\.gz
更新
如果你可以在Coda中使用多线模式,请打开它,然后在正则表达式的末尾添加$
。
如果没有,如果您将(?=[\r\n])
添加到最后,您可能会找到成功。我不知道Coda支持什么,所以我不能肯定地说会有什么用。
尽管如果每一行以.lmp
结尾,只需将\.lmp
添加到正则表达式的末尾就更有意义了。
更新
似乎Coda中的最佳解决方案是用空字符串替换所有不以cmp_delta.xml.gz.lmp
结尾的行。
35653[^\r\n]*(?=[\r\n])(?<!cmp_delta\.xml\.gz\.lmp)
答案 1 :(得分:1)
尝试
35653(.*?)cmp_delta.xml.gz
而不是你的
35653(.*)cmp_delta.xml.gz
额外的&#39;?&#39;制作&#39; *&#39;行为不贪婪,说它会匹配可能的最小字符数。
换句话说,当您使用35653(.*)cmp_delta.xml.gz
时,您正在匹配&#34; 35653&#34;在第一次出现和最后出现的&#34; cmp_delta.xml.gz&#34;整个序列。
而35653(.*?)cmp_delta.xml.gz
将匹配&#34; 35653&#34;在第一次出现时,直到第一次出现&#34; cmp_delta.xml.gz&#34;。
答案 2 :(得分:0)
进行查找和替换。找到^.*(?<!cmp\.xml\.gz)$\n?
并替换为空。