有一个属性语言包文件:
label.username=Username:
label.tooltip_html=Please enter your username.</center></html>
label.password=Password:
label.tooltip_html=Please enter your password.</center></html>
如何匹配同时包含“_html”和“&lt; / center&gt;&lt; / html&gt;”的所有行按顺序排列并用相同的行替换它们,但结尾为“&lt; / center&gt;&lt; / html&gt;”。例如,行:
label.tooltip_html=Please enter your username.</center></html>
应该成为:
label.tooltip_html=Please enter your username.
注意:我想使用IDE(IntelliJ IDEA,Eclipse,NetBeans ......)进行替换
答案 0 :(得分:4)
既然你澄清了这个正则表达式将在IDE中使用,我在Eclipse中对它进行了测试并且它可以工作:
FIND:
(_html.*)</center></html>
REPLACE WITH:
$1
确保在“查找/替换”对话框中打开正则表达式开关。这将匹配包含_html.*
的任何字符串(.*
greedily匹配any不包含换行符的字符串),后跟</center></html>
。它使用(…)
brackets to capture匹配到第1组的内容,并使用$1
代替第1组中的替换代替。
如果该字符串在该行中以</center></html>
开头,则会有效删除_html
。
如果一行中可以有多个</center></html>
,如果左侧有_html_
则全部删除,那么正则表达式会更复杂,但可以在如果绝对需要,可以使用\G
continuing anchor一个正则表达式。
更一般地说,你也可以匹配这样的东西:
(delete)this part only(please)
现在创建了2个捕获组。您可以将字符串与此模式匹配,并替换为$1$2
,它将有效删除this part only
,但前提是delete
后面跟please
。当然,这些子模式可能更复杂。
答案 1 :(得分:3)
if (line.contains("_html=")) {
line = line.replace("</center></html>", "");
}
此处不需要regExp;)(编辑),只要属性文件的所有行都格式良好。
答案 2 :(得分:1)
尝试这样的事情:
Pattern p = Pattern.compile(".*(_html).*</center></html>");
Matcher m = p.matcher(input_line); // get a matcher object
String output = input_line;
if (m.matches()) {
String output = input_line.replace("</center></html>", "");
}
答案 3 :(得分:1)
String s = "label.tooltip_html=Please enter your password.</center></html>";
Pattern p = Pattern.compile("(_html.*)</center></html>");
Matcher m = p.matcher(s);
System.out.println(m.replaceAll("$1"));
答案 4 :(得分:0)
/^(.*)<\/center><\/html>/
找到你的
label.tooltip_html=Please enter your username.
一部分。然后你就可以正确地将字符串放在一起了。