正则表达式查找与字符匹配的行中字符的首次出现

时间:2018-10-25 18:43:11

标签: regex

我正在尝试在所有属性文件的Eclipse工作区中查找和替换。条件是我必须找到具有字符“ <”的行,然后在那些匹配的行上获得第一个匹配的“ =”字符。

例如

app.searchform.height.label=Height <b>(in cm)</b>

我想在上一行中找到字符=,并用=<has_html>替换它,这样我得到以下输出

app.searchform.height.label=<has_html>Height <b>(in cm)</b>

2 个答案:

答案 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>

Working Example

说明:
为了将匹配限制为每行1个,我从^
行的开头开始匹配 然后使用懒惰的量词扩展单词,将所有内容填充到捕获组中,以便稍后使用(.*?)粘贴回去
然后以=字符终止扩展,并使用前瞻性(?=.*<)检查<字符