在Java中我有这个字符串:
uk\learningAid\UserInputs\UserClass.java:16: error: cannot find symbol
player.mvRight(3);
我目前正在使用此正则表达式来匹配16
和cannot find symbol
:
Pattern pattern = Pattern.compile(":(\\d+):\\serror:\\s(.*)");
但是,我还希望匹配新行上的player.mvRight(3);
。我该怎么做?
我尝试在reex的末尾添加此\\n(.*)
,但无法匹配任何内容。
答案 0 :(得分:0)
匹配包括新行到第一个&#34 ;;"。
Pattern pattern = Pattern.compile(":(\\d)+:\\serror:\\s(.*)\\n(.*);");
答案 1 :(得分:0)
根据您的评论,如果它不一定需要是正则表达式,则String
方法(例如substring()
和indexof()
)可用于获取某些字符的位置和将它们用作具有特定模式的任何字符串的标记。以下SSCCE应适用于您的String
和任何类似格式。
public class Test {
public static void main(String[] args) {
String toProcess = "uk\\learningAid\\UserInputs\\UserClass.java:16: error: cannot find symbol \nplayer.mvRight(3);";
int firstCol = toProcess.indexOf(":");
int secondCol = toProcess.indexOf(":", firstCol+1);
int lastCol = toProcess.lastIndexOf(":");
System.out.println(toProcess.substring(firstCol+1, secondCol) + toProcess.substring(lastCol+1));
}
}
输出:
16 cannot find symbol
player.mvRight(3);
此外,如果您希望删除换行符,则只需在开头调用toProcess = toProcess.replaceAll("\n", "");
即可删除换行符。