我正在Oracle中修復一些文本。問題是我的數據中的句子有句子沒有用空格分隔的詞。例如:?Oracle regexp_replace - 爲單獨的句子添加空格
句無句space.Between
一句問號第二句
我已經測試了以下在regex101 REPLACE語句,它似乎工作在那裏,但我不明白爲什麼它不能在Oracle中工作:
regexp_replace(review_text, '([^\s\.])([\.!\?]+)([^\s\.\d])', '\1\2 \3')
這應該允許我查找分句時間段/感嘆號/問號(單個或分組),並在句子之間添加必要的空格。我意識到還有其他的方式可以將句子分開,但我上面的內容應該涵蓋大部分用例。第三個捕獲組中的\ d是爲了確保我不會意外更改諸如「4.5」到「4. 5」之類的數值。
測試組之前:
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
後的變化應該是這樣的:
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鏈接:https://regex101.com/r/dC9zT8/1
雖然所有變化工作從regex101預期,我的問題是,我進入Oracle的原因是我的第三個和第四個測試用例沒有按預期工作。 Oracle不會在多個句點(省略號)組之後添加空格,而regexp_replace會爲「4.5」添加空格。我不確定爲什麼會出現這種情況,但也許有一些關於我缺少的Oracle regexp_replace的特性。
任何和所有的見解是值得讚賞的。謝謝!
我的猜測是它是在regex101中打開的全局匹配(g標誌),而不是在Oracle中打開。 –
全局發生是我沒有想到的,但即使在Oracle中使用setting = 0時,我仍然遇到同樣的問題。 – flamewheel