如果在Java之前有一些单词,则删除部分行的正则表达式

时间:2010-08-27 12:20:17

标签: java regex ide

有一个属性语言包文件:

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 ......)进行替换

5 个答案:

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

一部分。然后你就可以正确地将字符串放在一起了。