Ottenere il testo che segue dopo la corrispondenza regex

Sono nuovo nell’usare Regex, ho passato un rake di tutorial ma non ne ho trovato uno valido per quello che voglio fare,

Voglio cercare qualcosa, ma restituire tutto ciò che lo segue ma non la stringa di ricerca stessa

es. ” Qualche frase zoppa che è fantastica

cerca ” frase

torna ” è fantastico

Qualsiasi aiuto sarebbe molto apprezzato

Questa è la mia regex finora

sentence(.*) 

ma ritorna: frase che è fantastica

 Pattern pattern = Pattern.compile("sentence(.*)"); Matcher matcher = pattern.matcher("some lame sentence that is awesome"); boolean found = false; while (matcher.find()) { System.out.println("I found the text: " + matcher.group().toString()); found = true; } if (!found) { System.out.println("I didn't find the text"); } 

Puoi farlo con “solo l’espressione regolare” come richiesto in un commento:

 (?< =sentence).* 

(?< =sentence) è un'affermazione positiva . Questo corrisponde ad una certa posizione nella stringa, cioè in una posizione subito dopo la sentence testo senza rendere quel testo stesso parte della corrispondenza. Di conseguenza, (?< =sentence).* Corrisponderà a qualsiasi testo dopo la sentence .

Questa è una caratteristica piuttosto carina di regex. Tuttavia, in Java questo funzionerà solo per sottoespressioni a lunghezza finita, cioè (?< =sentence|word|(foo){1,4}) è legale, ma (?< =sentence\s*) non lo è.

La tua espressione regolare "sentence(.*)" Ha ragione. Per recuperare i contenuti del gruppo tra parentesi, chiameresti:

 Pattern p = Pattern.compile( "sentence(.*)" ); Matcher m = p.matcher( "some lame sentence that is awesome" ); if ( m.find() ) { String s = m.group(1); // " that is awesome" } 

Nota l’uso di m.find() in questo caso (tenta di trovare ovunque sulla stringa) e non m.matches() (fallirebbe a causa del prefisso “alcuni lame”, in questo caso la regex dovrebbe essere ".*sentence(.*)" )

se Matcher è inizializzato con str , dopo la partita, puoi ottenere la parte dopo la partita con

 str.substring(matcher.end()) 

Codice d’esempio:

 final String str = "Some lame sentence that is awesome"; final Matcher matcher = Pattern.compile("sentence").matcher(str); if(matcher.find()){ System.out.println(str.substring(matcher.end()).trim()); } 

Produzione:

questo è impressionante

Devi usare il gruppo (int) del tuo matcher – il gruppo (0) è l’intera partita e il gruppo (1) è il primo gruppo che hai segnato. Nell’esempio specificato, il gruppo (1) è ciò che viene dopo ” frase “.

Hai solo bisogno di mettere “gruppo (1)” invece di “gruppo ()” nella riga seguente e il ritorno sarà quello che ti aspettavi:

 System.out.println("I found the text: " + matcher.group(**1**).toString());