2010-07-19 16 views
6
cerdo

cerdo utilizando el Apache y el textocoincidencia de expresión regular en la

hahahah. my brother just didnt do anything wrong. He cheated on a test? no way! 

estoy tratando de igualar "mi hermano simplemente aún no ha hecho nada malo."

Idealmente, me gustaría combinar cualquier cosa que comience con "mi hermano solo" y terminar con cualquiera de los signos de puntuación (final de la oración) o EOL.

En cuanto a los documentos de cerdo, y luego siguiendo el enlace a java.util.regex.Pattern, supongo que debería ser capaz de utilizar

extrctd = FOREACH fltr GENERATE FLATTEN(EXTRACT(txt,'(my brother just .*\\p{Punct})')) as (txt:chararray); 

pero que parece coincidir hasta el final de la línea . ¿Alguna sugerencia para realizar este partido? Estoy listo para tirar de mi pelo, y por tirar de mi pelo, me refiero a cambiar al pitón de streaming

Respuesta

4

Los cuantificadores por defecto son greedy. Esto significa que coinciden tanto como sea posible. En este caso, desea hacer coincidir solo hasta el primer signo de puntuación. En otras palabras, quieres unir lo menos posible.

Así que para resolver el problema que debe hacer el quanitifer no codicioso añadiendo un ? inmediatamente después de que:

 
my brother just .*?\\p{Punct} 
       ^

Tenga en cuenta que el uso de ? aquí es diferente de su uso como un cuantificador donde significa ' coincide con cero o uno '.

+0

¿Le importaría explicar la parte codiciosos? Pensé que simplemente estaría combinando desde la palabra simplemente, cualquier texto siguiente, hasta la primera instancia de puntuación. –

+0

Sin ser codicioso, no coincide con la primera instancia de puntuación, sino que coincide hasta el último. – Wrikken

+0

@Neil Kodner: He actualizado la respuesta. –

0

Ha intentado: .*(my brother just .*\\p{Punct})

Parece que tu expresión quería la parte my brother ser el comienzo de la cadena, pero en su ejemplo está en el medio de la cadena, por lo que debe dar cuenta de todo antes de my brother.

Cuestiones relacionadas