Obteniendo el texto que sigue después del emparejamiento de expresiones regulares

Soy nuevo en el uso de Regex, he estado repasando una serie de tutoriales pero no he encontrado uno que se aplique a lo que quiero hacer,

Quiero buscar algo, pero devuelvo todo lo que sigue pero no la cadena de búsqueda en sí

por ejemplo, “una frase poco convincente que es increíble

buscar ” oración

devuelve ” eso es asombroso

Cualquier ayuda sería muy apreciada

Esta es mi expresión regular hasta el momento

sentence(.*) 

pero vuelve: frase que es impresionante

 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"); } 

Puedes hacer esto con “solo la expresión regular” como pediste en un comentario:

 (?<=sentence).* 

(?<=sentence) es una afirmación de mirada positiva detrás . Esto coincide en una posición determinada en la cadena, es decir, en una posición justo después de la sentence texto sin hacer que ese texto sea parte del juego. En consecuencia, (?<=sentence).* Coincidirá con cualquier texto después de la sentence .

Esta es una buena característica de regex. Sin embargo, en Java esto solo funcionará para subexpresiones de longitud finita, es decir, (?<=sentence|word|(foo){1,4}) es legal, pero (?<=sentence\s*) no.

Su expresión regular "sentence(.*)" Es correcta. Para recuperar el contenido del grupo entre paréntesis, debe llamar:

 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" } 

Tenga en cuenta el uso de m.find() en este caso (intenta encontrar en cualquier lugar de la cadena) y no m.matches() (fallaría debido al prefijo “algunos cojos”; en este caso, la expresión regular debería ser ".*sentence(.*)" )

si Matcher se inicializa con str , después del partido, puede obtener la parte después del partido con

 str.substring(matcher.end()) 

Código de muestra:

 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()); } 

Salida:

eso es asombroso

Debe usar el grupo (int) de su emparejador – el grupo (0) es la coincidencia completa, y el grupo (1) es el primer grupo que marcó. En el ejemplo que especifique, el grupo (1) es lo que viene después de ” oración “.

Solo debe colocar “grupo (1)” en lugar de “grupo ()” en la siguiente línea y la devolución será la que esperaba:

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