Quiero limpiar una columna archivada de texto libre para el análisis de texto y estoy tratando de eliminar todos los dígitos excepto cuando van seguidos de una letra específica. En el siguiente ejemplo, quiero eliminar los primeros números pero mantener 120f y 119 f, ya que son valores significativos.
Usando la siguiente expresión regular:
Phrase =
"14.300.114 .temperature is not 120f but 119 f...";
Show( Phrase );
Regex( Phrase, "\d+([^\d+(f|\sf)])", "", GLOBALREPLACE );
me da este resultado:
"La temperatura de 114 no es 120 ° F sino 119 ° F ...". Las temperaturas se mantienen correctamente, pero no se eliminan todos los dígitos de la primera cadena de dígitos.
Mi primera iteración se veía así:
Regex( Phrase, "\d+([^\d+f])", "", GLOBALREPLACE );
lo que resultó en:
".temperature no es 120f pero f ..."
Así que esto tuvo éxito en eliminar todos los dígitos, pero no mantiene el caso "119 f" (con el espacio entre el número y la "f").
¿Puede alguien ayudarme a entender cómo construir la expresión que elimine correctamente todos los dígitos excepto cuando esté seguida de "f" o de "f"?
Intente usar una anticipación negativa:
Phrase = "14.300.114 .temperature is not 120f but 119 f...";
Show( Phrase );
result = Regex( Phrase, "(?!\d+\s*f)\d+", "", GLOBALREPLACE );
Show( result);
Salida:
Frase = "14.300.114. La temperatura no es 120 ° F sino 119 ° F ...";
resultado = ".. .la temperatura no es 120 ° F sino 119 ° F ... ";