我正试图删除postgres中两个字幕之间的所有内容:
regexp_replace(text, 'caption1:[\S\s\n\r]+?:', '', 'ig') AS text
但是我收到了这个错误:
ERROR: invalid regular expression: invalid escape \ sequence
SQL state: 2201B
看起来它不允许我与\S (any non-whitespace character)
示例文字:
Lorem ipsum
Caption1:
I want this text to be removed.
And this line too.
Caption2:
Consectetuer adipiscing elit.
应该成为:
Lorem ipsum
Consectetuer adipiscing elit.
答案 0 :(得分:1)
来自document:
在括号表达式中,\ d,\ s和\ w会丢失其外括号, 和\ D,\ S和\ W是非法的。 (例如,[a-c \ d]是 相当于[a-c [:digit:]]。另外,[a-c \ D],相当于 [a-c ^ [:digit:]],是非法的。)
所以你的正则表达式应该是:
caption1:[^[:space:][:space:]\n\r]+?:
答案 1 :(得分:0)
如果要使用转义字符类,则需要两个反斜杠,例如使用\\s
代替\s
。但无论如何,我不认为你的逻辑真的需要这个。相反,您可以使用以下查询:
SELECT 'Caption1: ' || right(text, char_length(text) - position('Caption2' in text) + 1)
FROM yourTable
答案 2 :(得分:0)
[\S\s\n\r]
无法在PostgreSQL中运行,因为此引擎不支持速记类似Perl的字符类(如\S
,\d
,\ W , etc.) inside bracket expressions (i.e. inside
[... ]`)。它们被解析为\
和后面的字母。
您需要使用
regexp_replace(text, 'caption1:[^:]+:', '', 'ig') AS text
请注意,+
是一个常规的贪心量词,可以匹配它修改的模式的一个或多个匹配项。量化模式为[^:]
。它是一个字符类(或者也称为括号表达式),使用^
之后的^
字符否定。[^:]
。因此,:
匹配除以外的任何字符?
包括换行符。
在+
之后你不需要caption1:[^:]+:
作为懒惰模式,在这种情况下,它将比贪婪版本慢。
因此,请使用caption1:
:
[^:]+
- 文字子字符串:
- 除:
:
- 文字positions = windspeedalongblade;