如何修剪java中字符串中以字符开头和结尾的特定行

时间:2019-05-16 14:07:13

标签: regex java-8

我已将多行字符串存储在java中,如下面的代码所示,其输出显示为:

  

aa

     

bb

     

hhh me $ hdddhd hhhdhhdhh

     

hrx

     

$

     

dddsss

我不需要以$ h开头的行,也不需要$$之间的行。

我需要获取输出

  

aa

     

bb

     

hrx

     

dddsss

我已经在日食上尝试过这样

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class dummyFile {

public static void main(String[] args) throws FileNotFoundException {

    String line = new StringBuilder()
            .append("aa\n\n")
            .append("bb\n\n")
            .append("hhh me $ hdddhd hhhdhhdhh\n\n")
            .append("hrx\n\n")
            .append("$\n\n")
            .append("dddsss")  
            .toString();
    System.out.println(line);

    String pattern = "hhh me (.)";

    Pattern r = Pattern.compile(pattern);

    Matcher m = r.matcher(line);

    if (m.find())
    {
        System.out.println(m.group(1));
    }

    if (line.contains("hhh me "+ m.group(1)))
    {
        line.replace(
                line.substring(
                        line.indexOf("banner mod " +m.group(1)),
                        line.lastIndexOf(m.group(1))+1
                    ),
                    ""
                )
                .replace("\n\n", "\n");
    }
    System.out.println(line);

}

}

有人可以帮忙吗??

2 个答案:

答案 0 :(得分:1)

Ph,那真是个好玩的(如果您像我一样疯狂!)

(?!.*?\$.*?)^.+?(?:\n\n|$).*?

您将需要正则表达式选项globalmultiline。对于大多数正则表达式实例而言,只需格式化即可:

/(?!.*?\$.*?)^.+?(?:\n\n|$).*?/gm

但是对于Java,可能需要提供一些选项,但我不确定100%。

该模式将为您提供多个匹配项,例如,您可以将它们与StringBuilder粘在一起。

如果您真的想要,我将编辑我的答案,并在需要时准确细分其操作。

答案 1 :(得分:0)

这听起来很像是我不想为您做的家庭作业。但我会在这里扔一些东西,希望可以帮助您解决问题。

您的正则表达式将无法满足您的需求。 (.)将捕获一个字符,并且不会捕获换行符。因此,您必须修复该问题。 +匹配一个或多个先前字符,*匹配零个或多个先前字符。似乎您还想确保自己从$$匹配。您正在使用Java字符串,因此必须对其进行转义。

为您的正则表达式尝试以下操作:

final String pattern = "hhh me \\$([a-zA-Z\\s\n\r]*)\\$";

然后在Eclipse或Java文档中,在Matcher类中查找一些有用的方法来查找/替换您已找到的匹配项(在正则表达式中()中的内容)。

也许像Matcher.replaceFirst()这样的东西会有所帮助。