1

在 Postgres 数据库(9.3)中,我有这样的字符串,我打算从中删除链接:

'HV 3 STANKOVERLAST (+Inc,net: reg.inmeld+) , J.J. Cremerplein 46 AMSTERDAM [ ASD ] http:\/\/t.co\/qzmyMibvHn #p2000'
'A1 13105 AMSTERDAM Bickersgracht 270 http:\/\/t.co\/4oX6B5oAo4 #p2000'
'A1 13157 AMSTERDAM Argonautenstraat 54 3 http:\/\/t.co\/mmyjBcWEFY #p2000'
'A1 13122 AMSTERDAM Tweede Helmersstraat 6 Hotel Crystal http:\/\/t.co\/BWGj4R1noh #p2000'

要删除它们,我使用了:

split_part(text, 'http', 1)

不幸的是,并非所有人都以最终链接的方式构建:

'BR 2 BUITENBRAND (+http:\/\/t.co\/1x4jPyfA9e: reg.inmeld+) Ferdinand Bolstraat , Quellijnstraat AMSTERDAM [ ASD ] #p2000 #watiserloos'

在这里使用split_part()会删除这个字符串的大部分

我已经在寻找某种正则表达式函数,但找不到这些动态链接的解决方案。

4

1 回答 1

1

通常,您可以使用regexp_replace()substring()正则表达式一起从字符串中删除大部分内容,只要您可以清楚地定义它。

在您的情况下,类似于:

SELECT regexp_replace(string, 'http:[^[:space:]]+(:?\s*#p\d+)?', '') AS trimmed

或者更简单,根据您后来的评论:

以 http 开头直到下一个空格的字符串部分

(或字符串结尾,我可以添加)

SELECT regexp_replace(string, 'http:[^[:space:]]+', '') AS trimmed

替换模式的第一次出现。添加全局开关'g',如果可以有更多。

-> SQL小提琴

解释

[^[:space:]].. 所有非空白字符的字符类。
^..否定类。..由您的语言环境定义的
[:space:]空白字符的字符类。剪切从下一个空格字符开始的任何部分。另外,可选地,一个悬空后跟一个数字。.. 一个或多个原子http:#p
+

在这个最近的相关问题下有更多解释:
Regex failed to match number and dash with letter (or space and letter)

于 2013-12-03T22:08:29.720 回答