如何使用 REGEXREPLACE 从具有不同类型字符的长行文本中提取图形

问题描述 投票:0回答:1

我在名为“Charge_Details”的列中有这种格式的字符串,但有细微差别:SBLC FEE <> 1 - 360 天*!<> 400,000.00 美元<> 08/02/18 - 17/12/18 312 <>9

我正在尝试使用 REGEX 函数提取美元之前的金额。我正在使用的应用程序(来自 Highbond 的 ACL)仅具有 REGEXFIND 和 REGEXREPLACE,其语法如下:REGEXFIND(string,pattern) 和 REGEXREPLACE(string,pattern,new_string) 函数。 您可以忽略此请求的 ACL 脚本部分。我只需要 REGEX 部分的帮助。

它使用与任何其他应用程序相同的 REGEX 规则。

我尝试删除“<<>>”,然后尝试仅返回金额,但无济于事。

我首先创建了另一列(类别),将所有“<>”替换为“++”和“||”并排除“!” 排除( 全部(REGEXREPLACE(全部(REGEXREPLACE(charge_details,"<<(\w\w\w\w)>>\s\d{1,2}/\d\d/\d\d", "++")), "<<(\w\w\w\w)>>", "| |")), "!") IF FIND("!", CHARGE_DETAILS)

结果:SBLC 费用|| 1 - 360 天|| 400,000.00 美元++ - 2018 年 12 月 17 日 312 ||9

当我尝试使用“||”拆分新字符串列时作为分隔符,它仅在第一个段中返回“SBLC FEE”,在任何其他段中返回空白。

然后我尝试从使用以下命令创建的 CATEGORY 列中提取金额: REGEXREPLACE(类别, "(\d{0,3})(,\d{3})*(.\d\d)(\s\w\w\w)|)","$1$2$3$4" )

它只返回 CATEGORY 列中的所有内容,而不是四个组。

谢谢。

sql regex acl regex-replace
1个回答
0
投票

这个示例是在 Oracle 中的,但应该对您使用正则表达式有所帮助。 WITH 子句仅设置测试数据。正则表达式表示,匹配零个或多个字符,后跟一个空格,后跟 1 个或多个数字,后跟零个或多个字符(非贪婪地),直到后跟文字“USD”,然后是其他任何内容。请注意“后跟零个或多个字符的数字”部分周围的括号。这表示“记住”组。将整个字符串替换为记住的组#1。

with tbl(str) as (
  select 'SBLC FEE <> 1 - 360 day*!<> 400,000.00 USD<> 08/02/18 - 17/12/18 312 <>9'
   from dual
 )
 select regexp_replace(str, '.* (\d+.*?) USD.*', '\1') USD
 from tbl;


USD       
----------
400,000.00
1 row selected.
© www.soinside.com 2019 - 2024. All rights reserved.