gpt4 book ai didi

sql - Oracle SQL - 编辑自由文本叙述中除最后四位数字之外的所有不同长度数字的多个出现

转载 作者:行者123 更新时间:2023-12-02 09:05:54 26 4
gpt4 key购买 nike

是否有直接的方法,也许使用 REGEXP_REPLACE 等,来编辑自由文本中出现的除最后四位数字(或 5 或以上的不同长度)之外的所有数字(在文本中可能会多次出现单独的数字)文本)?

例如

Input = 'This is a test text with numbers 12345, 9876543210 and separately number 1234567887654321 all buried within the text'

Output = 'This is a test text with numbers ****5, *****3210 and separately number ************4321 all buried within the text'

使用 REGEX_REPLACE,用 * 替换所有数字显然很简单,但它保留了最后四位数字并用正确数量的 * 替换,这让我很烦恼。

任何帮助将不胜感激!

(仅供引用,由于通常的业务限制,这必须在检索数据的查询中完成,而不是使用实际的 Oracle DBMS 编辑功能)。

非常感谢。

最佳答案

您可以尝试以下正则表达式:

regexp_replace(txt, '(\d{4})(\d+(\D|$))', '****\2')

这会捕获 4 个数字的序列,后跟至少一个数字,然后是一个非数字字符(或字符串末尾),并将它们替换为 4 个星号。

Demo on DB Fiddle:

with t as (select 'select This is a test text with numbers 12345, 9876543210 and separately number 1234567887654321 all buried within the text' txt from dual)
select regexp_replace(txt, '(\d{4})(\d+\D)', '****\2') new_text from t
| NEW_TEXT                                                                                                                    || :-------------------------------------------------------------------------------------------------------------------------- || select This is a test text with numbers ****5, ****543210 and separately number ****567887654321 all buried within the text |

Edit

Here is a simplified version, suggested by Aleksej in the comments:

regexp_replace(txt, '(\d{4})(\d+)', '****\2')

这之所以有效,是因为正则表达式引擎的贪婪性,它将吸收尽可能多的“\d+”。

关于sql - Oracle SQL - 编辑自由文本叙述中除最后四位数字之外的所有不同长度数字的多个出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640597/

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