REGEXP_REPLACE 不更换新角色
REGEXP_REPLACE not replacing a new character
我需要替换所有新行后面没有跟冒号的实例。这是因为冒号表示新记录的开始(一条记录可能跨越多行)。
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]
请注意,当前输出会替换第一个非“:”字符,但不会替换新行。有谁知道为什么这没有按预期工作?
提前致谢
您正在替换换行符及其后的字符。您需要捕获它之后的字符,并将其放入替换中。您可以使用 \number
引用捕获组
REGEXP_REPLACE(raw,'\n([^:])','this is a test')
Exasol 也支持 PCRE,因此您应该可以使用负前瞻:
REPLACE_REGEXP(raw, '\n(?!:)', 'this is a test')
它们在一个细微的方面有所不同:您的正则表达式不会匹配字符串末尾的换行符,因为那里没有匹配 [^:]
的内容。否定前瞻将在最后匹配。
我需要替换所有新行后面没有跟冒号的实例。这是因为冒号表示新记录的开始(一条记录可能跨越多行)。
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]
请注意,当前输出会替换第一个非“:”字符,但不会替换新行。有谁知道为什么这没有按预期工作?
提前致谢
您正在替换换行符及其后的字符。您需要捕获它之后的字符,并将其放入替换中。您可以使用 \number
REGEXP_REPLACE(raw,'\n([^:])','this is a test')
Exasol 也支持 PCRE,因此您应该可以使用负前瞻:
REPLACE_REGEXP(raw, '\n(?!:)', 'this is a test')
它们在一个细微的方面有所不同:您的正则表达式不会匹配字符串末尾的换行符,因为那里没有匹配 [^:]
的内容。否定前瞻将在最后匹配。