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