0

我需要替换新行后面没有冒号的所有实例。这是因为冒号表示新记录的开始(一条记录可能跨越多行)。

REGEXP_REPLACE(raw,'(\n[^:])','this is a test')

例如,输入:

:[MY DATA HERE]
[rest of record printed here]

产生输出:

:[MY DATA HERE]
this is a testrest of record printed here]

代替:

:[MY DATA HERE]this is a test[rest of record printed here]

请注意,当前输出替换了第一个非 ':' 字符,而不是新行。有谁知道为什么这不能按预期工作?

提前致谢

4

1 回答 1

1

您正在替换换行符和它之后的字符。您需要捕获它之后的角色,并将其放入替换中。您可以参考捕获组使用\number

REGEXP_REPLACE(raw,'\n([^:])','this is a test\1')

请参阅文档

Exasol 还支持 PCRE,因此您应该能够使用负前瞻:

REPLACE_REGEXP(raw, '\n(?!:)', 'this is a test')

它们以一种微妙的方式不同:您的正则表达式不会匹配字符串末尾的换行符,因为那里没有什么可以匹配的[^:]。负前瞻将在最后匹配。

于 2019-11-19T03:13:42.343 回答