我正在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