日常经常使用notepad++进行文本处理,因为notepad++的文本查找和替换支持正则表达式,使用起来非常方便。查找的界面如下所示:
notepad++的文本查找界面【查找目标】支持多种查找模式来查找文本文件,其中的正则表达式模式大大增强了文本查找的能力。进而我们可以用【替换为】输入框中的文本,去替换查找出来的文本。但如果我们在【替换为】输入框中想要使用【查找目标】中匹配到的字段,那该怎么做呢?
我们可以使用正则表达式的分组能力,在【查找目标】中的正则表达式通过()来包围想要用的字符,然后在【替换为】输入框中用\1、\2、…来获取查找到的第一、第二、… 个分组。
比如:
Text body | Search string | Replace string | Result |
---|---|---|---|
Hi my name is Fred | my name is (.+) | my name is not \1 | Hi my name is not Fred |
The quick brown fox jumped over the fat lazy dog | brown (.+) jumped over the (.+) | brown \2 jumped over the \1 | The quick brown fat jumped over the fox lazy dog |
这是一种常见的场景,比如下面的需求,假设原始的文本文件是这样:
iconUrl = in.readString();
title = in.readString();
subTitle = in.readString();
description = in.readString();
imageUrl = in.readString();
imageJumpSceheme = in.readString();
buttonText = in.readString();
buttonJumpScheme = in.readString();
针对每一行,我想把它换成this.xxx = xxx
的形式,这里每一行的xxx都是不一样的,没法简单匹配替换,那么可以使用分组的方法:
【查找目标】:(.*) = in.readString\(\);
【替换为】:info.\1 = \1;
结果如下:
info.iconUrl = iconUrl;
info.title = title;
info.subTitle = subTitle;
info.description = description;
info.imageUrl = imageUrl;
info.imageJumpSceheme = imageJumpSceheme;
info.buttonText = buttonText;
info.buttonJumpScheme = buttonJumpScheme;
网友评论