Как извлечь подстроку из строки Java, начиная с диапазона от \ n + до \ n и от \ n- до \ n в указанной ниже строке? - PullRequest
0 голосов
/ 03 апреля 2019

Входная строка как показано ниже:

@@ -106,12 +106,12 @@ end loop\n loop map dummm56\n \tdummy data/path/u/u_op/kl-sc45\n end loop\n-\n-loop map {$df=56,$kl=20564300,$testId=\"jk: message1 message2:48667697\",$kl3=true,$kl=true, $kl=[2],$kl=$kl1, $kl1=true, $kl1=[1],$kl14=$kl15,$kl16=$kl14}\n+##### message2:48667697\n+loop map {val56}\n \tl1 l2/l3/i3/l7_l90/l90-SC21_l90/l90-l90_l90_l90\n end loop\n-\n-loop map {val56}\n+#####kl message45:48667697\n+loop map {val34}\n \ttestcases data/testcases/path1/[ath5+path6/UC20015-SC21/UC20015-SC21\n end loop\n

В приведенной выше строке я хочу получить все подстроки, начиная с \ n + и заканчивая \ n . Кроме того, начиная с \ n- и заканчивая \ n с использованием регулярного выражения Java.

Ожидаемый результат следующий:

blank  // here its blank as first \n- to next \n nothing is there.
loop map {$df=56,$kl=20564300,$testId=\"jk: message1 message2:48667697\",$kl3=true,$kl=true, $kl=[2],$kl=$kl1, $kl1=true, $kl1=[1],$kl14=$kl15,$kl16=$kl14} // as second \n- to next \n
##### message2:48667697 //third \n+ to next \n
loop map {val56}\n \tl1 l2/l3/i3/l7_l90/l90-SC21_l90/l90-l90_l90_l90 //fourth \n+ to next \n
blank // \n- to next \n
loop map {val56} // \n- to next \n
#####kl message45:48667697 // as \n+ to \n
loop map {val34} // as \n+ to \n

На самом деле я хотел сделать два разных набора: один для \ n + to \ n, а другой для \ n- to \ n. Как я хотел использовать это для более поздних целей.

ниже приведен код Java, с которым я пробовал:

String str="Pasted above string making sure no additional string literals should come.";
Pattern p0 = Pattern.compile("^(\\\\n[+|-])(.*?)(\\\\n.*)?$"); 
Matcher m = p0.matcher(str);
while (m.find()) {
System.out.printf( m.group(0));// here I am expecting my output to get printed.
}

Может ли кто-нибудь помочь мне с тем же. Любая помощь будет высоко оценен. Спасибо.

1 Ответ

0 голосов
/ 03 апреля 2019

Это регулярное выражение, которое может помочь вам

^(\\\\n[+|-])(.*)$

^ - Start of line

\\\\n - escaping \

^(\\\\n[+|-]) - Starting point of line followed by \n with either + or -

(.*?) anything can follow after that (? for non-greedy search if \n follows after that)

(\\\\n.*)? - Might be that \n follows (4th line in text)

$ - End of line. Assuming that after end of line what follows is \n-new line

Судя по предоставленному вами выводу, существуют и другие условия, которые вы забылиупомянуть в вашем вопросе, например, почему ###problem statement1 не выводится, потому что оно начинается с \n+ и заканчивается новой строкой.Ниже приведен фрагмент кода для того же

 public static void main(String[] args) throws Exception {
    Pattern pattern = Pattern.compile("^(\\\\n[+|-])(.*?)(\\\\n.*)?$"); 
    Matcher matcher = null;

    BufferedReader br = new BufferedReader(new FileReader(
            "filePath"));
    String line = null;
    while ((line = br.readLine()) != null) {
        matcher = pattern.matcher(line);
        while (matcher.find()) {
            System.out.println(matcher.group(2));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...