提问人:Emmanuel Salau 提问时间:11/1/2023 最后编辑:Emmanuel Salau 更新时间:11/1/2023 访问量:45
如何在ACL中使用REGEXREPLACE从具有不同类型字符的一长行文本中提取图形(Highbond)
How to extract a figure from a long line of text with different kinds of characters using REGEXREPLACE in ACL (Highbond)
问:
我在名为“Charge_Details”的列中有这种格式的字符串,但略有不同: SBLC费用 <> 1 - 360 天*!<> 400,000.00 美元<> 08/02/18 - 17/12/18 312 <>9
我正在尝试使用正则表达式函数提取美元之前的金额。我正在使用的应用程序(来自 Highbond 的 ACL)只有 REGEXFIND 和 REGEXREPLACE 具有以下语法:REGEXFIND(string, pattern) 和 REGEXREPLACE(string, pattern, new_string) 函数。 您可以忽略此请求的 ACL 脚本部分。我只需要 REGEX 部分的帮助。
它使用与任何其他应用程序相同的 REGEX 规则。
我尝试删除“<<>>”,然后尝试仅返回金额但无济于事。
我首先创建了另一个列(CATEGORY),将所有“<>”替换为“++”和“||”,并排除了“!” EXCLUDE( ALL(REGEXREPLACE(ALL(REGEXREPLACE(charge_details,“<<(\W\W\W\W)>>\s\d{1,2}/\d\d/\d\d”, “++”)), “<<(\w\w\w\w)>>”, “||”)), “!”)IF FIND(“!”, CHARGE_DETAILS)
结果:SBLC FEE||1 - 360 天||400,000.00 美元++ - 17/12/18 312 ||9
当我尝试使用“||”作为分隔符拆分新字符串列时,它只在第一段中返回“SBLC FEE”,在任何其他段中返回空白。
然后,我尝试使用以下命令从我创建的 CATEGORY 列中提取金额: REGEXREPLACE(类别, “(\d{0,3})(,\d{3})*(.\d\d)(\s\w\w\w)|)”,“$1$2$3$4”)
它只是返回 CATEGORY 列中的所有内容,而不是四个组。
谢谢。
答:
此示例在 Oracle 中,但应该可以帮助您使用正则表达式。WITH 子句只是设置测试数据。正则表达式说,匹配零个或多个字符,后跟一个空格,后跟一个或多个数字,后跟零个或多个字符(非贪婪),直到后面跟着字面上的“spaceUSD”,然后是其他任何字符。注意“后跟零个或多个字符的数字”部分周围的括号。这意味着一个“被记住”的群体。将整个字符串替换为记住的组 #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') as USD
from tbl;
USD
----------
400,000.00
1 row selected.
评论
上一个:SQL 中的字符串剪切
评论