在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()
会删除此字符串的大部分内容
我已经找了一些正则表达式函数,但找不到这些动态链接的解决方案。
答案 0 :(得分:1)
通常情况下,regexp_replace()
or substring()
与regular expressions一起使用可以剪切字符串中的大部分内容,只要您能清楚地定义它。
在您的情况下,例如:
SELECT regexp_replace(string, 'http:[^[:space:]]+(:?\s*#p\d+)?', '') AS trimmed
或者更简单,根据你后来的评论:
以http开头的字符串部分直到下一个空格
(或字符串的结尾,我可以添加)
SELECT regexp_replace(string, 'http:[^[:space:]]+', '') AS trimmed
替换第一次出现的模式。添加global switch 'g'
,如果可以的话。
[^[:space:]]
..所有非空白字符的字符类
^
..否定班级
[:space:]
..空格characters as defined by your locale的字符类。
将以http:
开头的任何部分剪切到下一个空格字符。另外,可选地,悬挂#p
后跟一个数字
+
..一个或多个原子
根据最近的相关问题进行了更多解释:
Regex failing to match number and dash with letter (or space and letter)