[英]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.