在 postgreSQL 中使用正则表达式获取特定类型的字符串

Getting a particular type string using regular expression in postgreSQL

我正在尝试使用 postgreSQL 从 table 的 jason 列中获取特定类型的字符串。

这是字符串片段,我试图从中获取每行的费率和金额(例如 CommentFOS 费率 $00.00)

Last 4  CommentsFOS rate .00  OT/HOL .00,  AP rate .00  OT/HOL .00

这是我目前的查询

select id,  
       regexp_matches(current_data->>'description', '..\w\/\w* $[0-9]+[\.]*[0-9]','g') as rates
from table;

我得到的输出是这样的

ID. rates
1   { OT/HOL .0}
1   { OT/HOL .0}

也试过这个查询

select id, 
       regexp_matches(current_data->>'description', '\w*FOS \w* $[0-9]+[\.]*[0-9]','g') as rates
from table;

我从上面 sql 得到的输出是

ID. rates
1   { CommentsFOS rate .00} 

但是,我期待这样的输出

ID. rates
1   { CommentsFOS rate .00}   
1   { OT/HOL .00}
1   { AP rate .00}
1   { OT/HOL .00}

您可以使用

\S+(?:\s+rate)?\s+$\d*\.?\d+

regex demo详情:

  • \S+ - 一个或多个 non-whitespace 个字符
  • (?:\s+rate)? - 一个或多个空格和单词 rate
  • 的可选序列
  • \s+ - 一个或多个空格
  • $ - 一个 $ 字符
  • \d*\.?\d+ - 零个或多个数字,一个可选的 . 字符,一个或多个数字。

查看 Postgres 演示:

SELECT REGEXP_MATCHES(
    'Last 4  CommentsFOS rate .00  OT/HOL .00,  AP rate .00  OT/HOL .00',
    '\S+(?:\s+rate)?\s+$\d*\.?\d+','g') as rates

输出: