2011-12-08 9 views
8

¿Alguien puede sugerir cómo se construiría un patrón para extraer la primera lista de números contiguos de estos datos?Patrón repetido

sample = {52.2624, 54.4003, 60.7418, 61.3801, 62.6397, 61.7992, 
    63.2282, "", "", "", "", "", "", "", "", "", "", 62.3921, 61.897, 
    60.299, 59.053, 61.3778, 64.3724, 63.4251, 78.1912, 79.7451, 
    80.4741, "", 81.324, 79.9114, 93.7509}; 

He intentado variaciones como sample //. {useable : _?NumberQ .., ___} -> {useable} en vano.

useable = TakeWhile[sample, NumberQ] funciona bien, pero me gustaría saber cómo hacerlo mediante la coincidencia de patrones.

Respuesta

7

Tratando de preservar su lógica:

sample /. {useable : Longest[_?NumberQ ..], ___} -> {useable} 

Si desea que la secuencia numérica más larga:

sample /. {___, useable : Longest[_?NumberQ ..], ___} -> {useable} 

Editar

para obtener todas las secuencias numéricas:

Cases[SplitBy[sample, NumberQ], {_?NumberQ ..}] 

o

[email protected][sample //. {x___, useable : Longest[_?NumberQ ..], y___} :> 
               ([email protected]{useable}; {x}~Join~{y})] 
6

Una forma sería

sample /. {Longest[useable___?NumberQ], ___} :> {useable} 

que devuelve {52.2624, 54.4003, 60.7418, 61.3801, 62.6397, 61.7992, 63.2282} de su muestra.

+0

@ Simon, gracias. Pasé por el lado derecho más largo. –

7

Otra opción sería la de buscar la primera entrada no número:

sample /. {useable___, _?(!NumberQ[#]&), ___} :> {useable} 
+2

+1. Podría usar 'Except [_? NumberQ]' en lugar de '_? (! NumberQ [#] &)' también. –

Cuestiones relacionadas