Eclipse或Notepad ++中的区分大小写的字符串替换

时间:2012-01-11 17:27:11

标签: regex eclipse notepad++ replace

我正在使用Eclipse和Notepad ++来执行替换多个文件(xml和java)

我试图用[Ff]和[Mm]余烬替换[Pp] roduct [mm]余烬,并保留一个案例。

ProductMember -> FundMember
productMember -> fundMember
productmember -> fundmember

使用捕获组可以很容易地将M的情况保留为成员,但我对P替换无能为力。

感谢您的帮助!

3 个答案:

答案 0 :(得分:19)

在eclipse中,您可以使用正则表达式retain-case运算符:\ C.要解决您的示例,您应该搜索“Product”,替换为“\ CFund”(请务必勾选正则表达式选项)。这将取代产品与基金和产品与基金。

答案 1 :(得分:0)

np ++正则表达式非常差,你可以使用perl one-liner来完成这项工作:

perl -pi.back -e's{(productmember)}{ uc fundmember | (uc $1 ^ $1) . (uc(substr $1, -1) ^ substr $1, -1) x (length($new) - length $1) }egi;' theFile

摘自perl faq6

答案 2 :(得分:0)

虽然 Notepad++ 缺少 Eclipse 中可用的 \C 特性,但一些区分大小写的替换用例仍然可以用 Notepad++ 解决,尽管它不像 {{1} } 特征。 (从技术上讲,我相信 NPP 使用 \C 作为 \C 的同义词)。

功能参考

请参阅 Notepad++ 用户手册,其中有一个名为 Substition Escape Sequences 的部分描述了支持的替换 转义序列,例如:

  • .(使替换表达式中的以下字符小写,直到看到 \L
  • \E(使替换表达式中的以下字符大写,直到看到 \U)。

接下来是一个名为 Substitition Conditionals 的部分,它描述了允许您仅在特定捕获组匹配时进行替换的功能。

示例

假设我有字符串 \E 并且我想执行区分大小写的替换 foo FOO foo FOO,所以我的结果是 s/foo/bar。有了上面提到的 Notepad++ 功能,我可以做这个替换。

匹配正则表达式

bar BAR bar BAR

替换正则表达式

(foo)|(FOO)

如果匹配了 (?1\L:\U)bar \Lbar(相当于文字 {{1 }}) 如果 bar 匹配。我省略了 foo,因为它不需要,因为表达式结束就可以了。

为了获得正确的结果,不要忘记打开区分大小写复选框!