繁体   English   中英

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

[英]Regex to find first occurence of a character in lines matching a character

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

例如

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

我想在上面的行中找到char =并用=<has_html>代替,所以我得到以下输出

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

您可以使用此正则表达式,

(?=.*<)=

并替换为

=<has_html>

说明:前瞻性确保仅在字符串中找到<字符时才进行替换。 然后仅与=匹配,然后将其替换为= <has_html>。

演示, https://regex101.com/r/yLt9j4/1

Edit1:这是在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=<has_html>

工作实例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM