我正在尝试在所有属性文件的Eclipse工作区中查找和替换。条件是我必须找到具有字符“ <”的行,然后在那些匹配的行上获得第一个匹配的“ =”字符。
例如
app.searchform.height.label=Height <b>(in cm)</b>
我想在上一行中找到字符=
,并用=<has_html>
替换它,这样我得到以下输出
app.searchform.height.label=<has_html>Height <b>(in cm)</b>
答案 0 :(得分:3)
您可以使用此正则表达式,
(?=.*<)=
并替换为
=<has_html>
说明:前瞻性确保仅在字符串中找到<字符时才进行替换。然后仅与=匹配,然后将其替换为=
演示, https://regex101.com/r/yLt9j4/1
编辑1: 这是在Java代码中仅替换首次出现的=,
的方法public static void main(String[] args) {
String s = "app.searchform.height.label=Height <b>(in =cm)</b>";
System.out.println("Before: " + s);
s = s.replaceFirst("(?=.*<)=", "=<has_html>");
System.out.println("After: " + s);
}
这将提供以下输出,
Before: app.searchform.height.label=Height <b>(in =cm)</b>
After: app.searchform.height.label=<has_html>Height <b>(in =cm)</b>
答案 1 :(得分:1)
您可以尝试以下一种方法:
^(.*?)=(?=.*<)
使用它作为替换字符串:
$1=<has_html>
说明:
为了将匹配限制为每行1个,我从^
行的开头开始匹配
然后使用懒惰的量词扩展单词,将所有内容填充到捕获组中,以便稍后使用(.*?)
粘贴回去
然后以=
字符终止扩展,并使用前瞻性(?=.*<)
检查<
字符