有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式问题,删除整行

在过去的几个小时里,我一直在尝试创建一个正则表达式,在选择评级后删除以特定字眼开头的文本行

下面是我试图删除的内容。我还试图从这一段中去掉评分(通过或失败)

Review Master: text here 
1111111111 text here 
Rating: Fail text here 
Review Master Page text here 

我正在尝试删除所有以以下内容开头的行。 我有

^Review Master:
^[0-9]{10}
^Rating:
^Review Master Page

再一次,我正在努力替换(删除)并只找到评级


共 (1) 个答案

  1. # 1 楼答案

    如果您想在文件中找到这些精确的行,那么这将起作用:

    Review Master:\n\\d++\nRating:\\s*+(\\w++)\nReview Master Page"
    

    下面是一个将输入用作测试字符串的示例:

    public static void main(String[] args) throws Exception {
        final String in = "Review Master:\n"
                + "1111111111\n"
                + "Rating: Fail\n"
                + "Review Master Page";
        final Matcher m = Pattern.compile(""
                + "Review Master:\n"
                + "\\d++\n"
                + "Rating:\\s*+(\\w++)\n"
                + "Review Master Page").matcher(in);
        while(m.find()) {
            System.out.println(m.group(1));
        }
    }
    

    输出:

    Fail
    

    如果要删除这些行,则需要替换文件中作为String的模式:

    public static void main(String[] args) throws Exception {
        final String in = "Some other text\n"
                + "Review Master:\n"
                + "1111111111\n"
                + "Rating: Fail\n"
                + "Review Master Page\n"
                + "Some final text";
        final Matcher m = Pattern.compile(""
                + "\n?"
                + "Review Master:\n"
                + "\\d++\n"
                + "Rating:\\s*+(\\w++)\n"
                + "Review Master Page").matcher(in);
        final StringBuffer output = new StringBuffer();
        while (m.find()) {
            System.out.println(m.group(1));
            m.appendReplacement(output, "");
        }
        m.appendTail(output);
        System.out.println("Result: \"" + output.toString() + "\"");
    }
    

    输出:

    Fail
    Result: "Some other text
    Some final text"
    

    也就是说,我们使用Matcher从输入中拉出通过/失败,并构建输出,替换匹配为空的文本块

    你还没有弄清楚模式的哪些部分是可变的