崇高文本中的不贪婪正则表达式匹配 2

Ungreedy regex matching in sublime text 2

提问人:AeroMaxx 提问时间:6/10/2022 最后编辑:AeroMaxx 更新时间:6/10/2022 访问量:38

问:

我对正则表达式相当熟悉,但似乎我不太擅长在崇高文本 2 中做正则表达式,我认为应该起作用的东西似乎匹配但太贪婪了。

我有一个包含许多命令的文件,如下所示,我想在其上方添加一个附加命令以创建要将文件移动到的目录。因此,对于以下示例,命令将是mvmkdirmkdir --parents --verbose '/path/to/dir2';

mv --no-clobber --verbose '/path/to/dir1/file1.zip' '/path/to/dir2/file2.zip';

我尝试了这个正则表达式,我确信它会很好,但它与整行匹配,而不仅仅是我想要匹配的部分。

崇高的正则表达式搜索

mv --no-clobber --verbose '(.*?).zip' '(.*?)/(.*?).zip';

崇高的正则表达式替换

mkdir --parents --verbose '$2';
mv --no-clobber --verbose '$1.zip' '$2\/$3.zip';

编辑:只是为了澄清第一个匹配整行,后面匹配什么都没有。(.*?)(.*?)

正则表达式 sublimetext2 sublimetext

评论

1赞 Wiktor Stribiżew 6/10/2022
mv --no-clobber --verbose '([^']*)' '([^']*)/([^']*)';

答:

0赞 anubhava 6/10/2022 #1

您几乎没有不需要的捕获组,因此无需使用 ..*?

您可以使用以下正则表达式进行搜索:

mv --no-clobber --verbose '[^']+' '(.+)/[^/.]+\.zip';

并使用以下方法替换:

$0\nmkdir --parents --verbose '$1';

这是命令完全匹配的反向引用。$0mv

输出:

mv --no-clobber --verbose '/path/to/dir1/file1.zip' '/path/to/dir2/files2.zip';
mkdir --parents --verbose '/path/to/dir2';

您还可以使用(匹配重置)进行搜索:\K

mv --no-clobber --verbose '[^']+' '(.+)/[^/.]+\.zip';\K

并替换为:

\nmkdir --parents --verbose '$1';