Android开发经验谈Android开发工具癖

Notepad++的正则表达式分组匹配

2019-07-10  本文已影响11人  好重

日常经常使用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;
上一篇下一篇

猜你喜欢

热点阅读