Ich arbeite in Oracle, um etwas Text zu beheben. Das Problem besteht darin, dass Sätze in meinen Daten Wörter enthalten, in denen Sätze nicht durch Leerzeichen getrennt sind. Zum Beispiel:Oracle regexp_replace - Hinzufügen von Leerzeichen zu separaten Sätzen
Satz ohne space.Between Sätze
Satz mit Fragezeichen Zweiten Satz
Ich habe die Aussage in regex101 ersetzen folgenden getestet und es scheint zu funktionieren da draußen, aber ich kann nicht feststellen, warum es in Oracle nicht funktioniert:
regexp_replace(review_text, '([^\s\.])([\.!\?]+)([^\s\.\d])', '\1\2 \3')
Dies sollte mir erlauben, nach Satztrennungszeiträumen/Ausrufezeichen/Fragezeichen (einzeln oder gruppiert) zu suchen und den notwendigen Abstand zwischen Sätzen hinzuzufügen. Ich weiß, dass es andere Wege gibt, wie Sätze getrennt werden können, aber was ich oben habe, sollte die große Mehrheit der Anwendungsfälle abdecken. Das \ d in der dritten Erfassungsgruppe soll sicherstellen, dass ich nicht zufällig numerische Werte wie "4.5" in "4. 5" ändere.
Vor Testgruppe:
Sentence without space.Between sentences
Sentence with space. Between sentences
Sentence with multiple periods...Between sentences
False positive sentence with 4.5 Liters
Sentence with!Exclamation point
Sentence with!Question mark
Nach Änderungen sollten wie folgt aussehen:
Sentence without space. Between sentences
Sentence with space. Between sentences
Sentence with multiple periods... Between sentences
False positive sentence with 4.5 Liters
Sentence with! Exclamation point
Sentence with! Question mark
Regex101 Link: https://regex101.com/r/dC9zT8/1
Während alle Änderungen wie erwartet aus regex101, mein Problem ist, dass Ich komme in Oracle ist, dass meine dritte und vierte Testfälle nicht wie vorgesehen funktionieren. Oracle fügt kein Leerzeichen nach der Gruppe mit mehreren Perioden (Ellipsen) hinzu, und regexp_replace fügt einen Platz für "4.5" hinzu. Ich bin nicht sicher, warum das der Fall ist, aber vielleicht gibt es eine Besonderheit bei Oracle regexp_replace, die ich vermisse.
Alle und alle Einblicke sind willkommen. Vielen Dank!
Meine Vermutung wäre, dass es das globale Spiel (g-Flag), die in regex101 auf und nicht in Oracle gedreht wird. –
Globale Vorkommen ist etwas, an das ich nicht gedacht habe, aber selbst wenn ich die Einstellung occurrence = 0 in Oracle verwende, bekomme ich immer noch die gleichen Probleme. – flamewheel