Extraer números de cadenas de tamaños desigualesTengo una columna de cadenas con números incrustados. Sé cómo determinar si estas cadenas contienen el texto correcto que estoy buscando, pero no cómo extraer los valores que vienen después de cada uno de estos. Si los tamaños de cadena fueran iguales, podría usar la función Munger según la ubicación, pero esto no se puede hacer ya que el tamaño de la cadena no es consistente.
Por ejemplo, "La solución es abcde +0.2, hay más texto aquí fghij -1".
Quiero consultar "abcde" y "fghij" y extraer los valores respectivos de +0.2 y -1 en el espacio justo después de que aparezcan las cadenas. Generalmente hay un espacio seguido de un +/- y un número (números enteros y decimales con un decimal como se muestra arriba).
Re: extraer números de cadenas de tamaños desigualesEcha un vistazo a la función Word (). Dados los ejemplos que dio, uno podría simplemente buscar la segunda palabra en la cadena, basándose en encontrar un espacio en blanco
Word (2, , "")
o
Puede Contiene () para encontrar un "+" o "-" y desde allí, substr () la cadena para obtener el valor numérico
Se adjunta la siguiente tabla de datos

Re: extraer números de cadenas de tamaños desigualesTambién puedes usar el Regex () funciona con expresiones regulares en una fórmula de columna. Ese enfoque podría ayudar si el ejemplo que dio no muestra todas las condiciones posibles. Este es un guión para ilustrar la idea.
Names Default to Here( 1 );
text = "The fix in is abcde +0.2, there is more text here fghij -1.";
answer 1 = Num( Regex( text, ".*abcde ([-+]?\d?.?\d?)", "\1" ) );
answer 2 = Num( Regex( text, ".*fghij ([-+]?\d?.?\d?)", "\1" ) );
los texto La variable en el script representa la fila actual para una fórmula de columna. los respuesta 1 sería el resultado en la misma fila de la primera columna de resultados nueva. Utiliza la expresión a la derecha del signo igual para la fórmula.
Este ejemplo es simple. Tendría que extenderse y refinarse si la naturaleza del texto o el prefacio de los números fueran más complicados.
También tiene patrones JMP para hacer coincidir, devolver y sustituir cadenas de caracteres.
Re: extraer números de cadenas de tamaños desigualesOtra forma más: pruebe la función de palabras. Esta es la fórmula de la columna:
look_for = {"abcde", "fghij", "klmno"};
wlist = Words( :Column 1, " " );
one_num = .;
For( i = 1, i <= N Items( look_for ), i++,
one_word = look_for[i];
f = Contains( wlist, one_word );
If( f,
one_num = Num( wlist[f + 1] );
Break();
);
);
one_num;