在 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
输出:
我正在尝试使用 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
输出: