我试图从123A America,234B Britania这样的名字中提取整数和字符。 我只想要号码和附件(即123A)。 我正在使用regexp_matches(name,'(\ d +)(\ D)'),结果如下:
{123,A},
{456,B}
我认为使用连接,获取数组的第一个元素,使用两个不同的函数获取第二个元素
(regexp_matches(name, '(\d+)(\D)' )) [1] || (regexp_matches(name, '(\d+)(\D)' )) [2]
但它会产生错误:
ERROR: functions and operators can take at most one set argument
如何将两个元素作为一个字符串?
答案 0 :(得分:1)
您不必将要搜索的两个项目作为不同的集合,只需将它们作为一个集合。移除)(
和\d+
之间的\D
,这将返回一个包含您正在寻找的整个字符串的集合。
结果如下 -
regexp_matches('123A America, 234B Britania', '(\d+\D)' )
这只会找到第一场比赛。要获取所有匹配的子字符串,请使用g
标记 -
regexp_matches('123A America, 234B Britania', '(\d+\D)', 'g')
答案 1 :(得分:0)
CREATE OR REPLACE FUNCTION do_something(_input character varying)
RETURNS character varying AS
$BODY$
DECLARE
matches text[];
BEGIN
matches := regexp_matches(_input, '^([0-9]{1,}_[^_]{1,})_[a-z]{1,}(.*)$','i');
return substring(matches[1], 0, 24)||matches[2];
END
$BODY$
LANGUAGE plpgsql;