我已将多行字符串存储在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);
}
}
有人可以帮忙吗??
答案 0 :(得分:1)
Ph,那真是个好玩的(如果您像我一样疯狂!)
(?!.*?\$.*?)^.+?(?:\n\n|$).*?
您将需要正则表达式选项global
和multiline
。对于大多数正则表达式实例而言,只需格式化即可:
/(?!.*?\$.*?)^.+?(?:\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()
这样的东西会有所帮助。