有条件地将字符添加到正则表达式匹配

时间:2013-04-23 23:28:13

标签: java regex eclipse

我在Eclipse中使用正则表达式,并且想知道是否有基于匹配添加字符的方法。

我正在使用这些表达式来匹配和替换:

Match: ^(\s*)(//)?(.*?)"([\p{Punct}\p{Space}]*)?(\p{Alnum}.*?\p{Alnum})([\p{Punct}\p{Space}]*)?"(.*?)$
Replace: $1$3"$4" \+ i18n.tr\("$5"\) \+ "$6"$7

例如

System.err.println("Unexpected number of guests: ");

我正在尝试用

替换它
System.err.println(i18n.tr("Unexpected number of guests") + ": ");

但我得到了

System.err.println("" + i18n.tr("Unexpected number of guests") + ": ");

如果没有捕获任何内容,有没有办法摆脱“+ +之前的i18n.tr(。*)?

1 个答案:

答案 0 :(得分:1)

单个搜索替换不能做到这一点!

唯一的方法是使用两个搜索替换:

  • 带有punct-space的第一个

Match: ^(\s*)(//)?(.*?)"([\p{Punct}\p{Space}]++)(\p{Alnum}.*?\p{Alnum})([\p{Punct}\p{Space}]*)?"(.*?)$

Replace: $1$3"$4" \+ i18n.tr\("$5"\) \+ "$6"$7

  • 没有punct-space的第二个

Match: ^(\s*)(//)?(.*?)"(\p{Alnum}.*?\p{Alnum})([\p{Punct}\p{Space}]*)?"(.*?)$

Replace: $1$3i18n.tr\("$4"\) \+ "$5"$6

不要忘记在任何尝试之前进行备份