Ich möchte eine Freitext-Spalte für die Textanalyse bereinigen und versuche, alle Ziffern zu löschen, außer wenn ein bestimmter Buchstabe folgt. Im folgenden Beispiel möchte ich die ersten Zahlen löschen, aber sowohl 120f als auch 119f beibehalten, da es sich um aussagekräftige Werte handelt.
Verwenden Sie den folgenden regulären Ausdruck:
Phrase =
"14.300.114 .temperature is not 120f but 119 f...";
Show( Phrase );
Regex( Phrase, "\d+([^\d+(f|\sf)])", "", GLOBALREPLACE );
gibt mir dieses Ergebnis:
"114. Temperatur ist nicht 120f, sondern 119f ...". Die Temperaturen werden erfolgreich beibehalten, aber nicht alle Ziffern der ersten Ziffernfolge werden gelöscht.
Meine erste Iteration sah folgendermaßen aus:
Regex( Phrase, "\d+([^\d+f])", "", GLOBALREPLACE );
Was dazu geführt hat :
".Temperatur ist nicht 120f aber f ..."
Dies war also erfolgreich beim Entfernen aller Ziffern, behält jedoch nicht den Fall "119 f" bei (mit dem Leerzeichen zwischen der Zahl und dem "f").
Kann mir jemand helfen zu verstehen, wie man den Ausdruck erstellt, der alle Ziffern korrekt löscht, außer wenn "f" oder "f" folgt?
Versuchen Sie es mit einem negativen Lookahead:
Phrase = "14.300.114 .temperature is not 120f but 119 f...";
Show( Phrase );
result = Regex( Phrase, "(?!\d+\s*f)\d+", "", GLOBALREPLACE );
Show( result);
Ausgabe:
Phrase = "14.300.114 .Temperatur ist nicht 120f, sondern 119f ...";
Ergebnis = ".. Die Temperatur beträgt nicht 120f, sondern 119f ... ";