gpt4 book ai didi

regex - 有没有一种有效的方法可以从 Postgres 中的列值中抓取子字符串?

转载 作者:行者123 更新时间:2023-11-29 12:20:36 25 4
gpt4 key购买 nike

我有一个名为 user_response 的列,我想在该列上进行各种操作,例如取出引号中包含的单词,以及取出冒号 (:) 之后的字符串

一个这样的操作是这样的:让我们说一下记录

user_response = "My company: 'XYZ Co.' has allowed to use:: the following \n \n kind of product: RealMadridTShirts"

现在,我想刮掉最后一个冒号 (:) 之后的字符串部分。因此,我的输出应该是 RealMadridTShirts

我可以通过以下 hack 以某种方式实现此目的:

SELECT reverse(split_part(reverse(user_response), ' :', 1))

但是,这是非常低效的,特别是当我必须对超过 500,000 行执行此操作时。这不是我会整天做的手术。此操作适用于每天一次的负载,但即便如此,负载也变得非常昂贵。

来自 Oracle,我知道我可以使用 INSTR 和 SUBSTR 函数以更优雅的方式实现它(无需反转字符串和所有内容。

此外,如果我必须在倒数第二个冒号之后删除文本怎么办?

最佳答案

找到最后一个冒号之后的字符串,对吗?

My company: 'XYZ Co.' has allowed to use:: the following \n \n kind of product: RealMadridTShirts

用正则表达式很简单:

regress=> SELECT (regexp_matches(
'My company: ''XYZ Co.'' has allowed to use:: the following \n \n kind of product: RealMadridTShirts',
'.*:(.*?)$')
)[1];
regexp_matches
--------------------
RealMadridTShirts
(1 row)

显然缺少一个函数来请求从特定起点开始计数的字符串的位置,这使得不使用正则表达式更难做到,但正则表达式肯定是解决这个问题的最快方法,我怀疑这是一个问题。

您更大的问题可能是您正在扫描如此多的数据。这永远不会很快。

关于regex - 有没有一种有效的方法可以从 Postgres 中的列值中抓取子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com