代码之家  ›  专栏  ›  技术社区  ›  Boris Pavlović

正则表达式,用于在Java中删除前面有单词的行的一部分

  •  2
  • Boris Pavlović  · 技术社区  · 14 年前

    有一个属性语言包文件:

    label.username=Username:
    label.tooltip_html=Please enter your username.</center></html>
    label.password=Password:
    label.tooltip_html=Please enter your password.</center></html>
    

    如何按该顺序匹配同时包含“\u html”和“</center></html>”的所有行,并将它们替换为除结尾“</center></html>”之外的同一行。例如,行:

    label.tooltip_html=Please enter your username.</center></html>
    

    应该变成:

    label.tooltip_html=Please enter your username.
    

    5 回复  |  直到 14 年前
        1
  •  4
  •   polygenelubricants    14 年前

    既然您澄清了这个regex将在IDE中使用,我在Eclipse中测试了它,它可以工作:

    FIND:
    (_html.*)</center></html>
    
    REPLACE WITH:
    $1
    

    一定要打开电源 正则表达式 在“查找/替换”对话框中切换。这将匹配任何包含 _html.* (如果 .* greedily 比赛 any 不包含换行符的字符串),后跟 </center></html> . 它使用 (…) brackets to capture $1

    这有效地消除了 </中心></html> 如果字符串前面有 _html

    如果可以有多个 </中心></html> _html_ \G continuing anchor 如果绝对需要的话。


    变化

    一般来说,你也可以这样搭配:

    (delete)this part only(please)
    

    $1$2 ,它将有效地删除 this part only ,但前提是前面有 delete please . 当然,这些子模式可能更复杂。

        2
  •  3
  •   Andreas Dolk    14 年前
    if (line.contains("_html=")) {
       line = line.replace("</center></html>", "");
    }
    

    此处不需要regExp;)( 编辑 )只要属性文件的所有行 .

        3
  •  1
  •   Amarghosh    14 年前
    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
  •  1
  •   amorfis    14 年前

    尝试以下操作:

    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>", "");   
    }
    
        5
  •  0
  •   tarrasch    14 年前
    /^(.*)<\/center><\/html>/ 
    

    找到你了

    label.tooltip_html=Please enter your username.