3

我正在尝试从 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

如何将两个元素作为一个字符串?

4

2 回答 2

1

您不必将要搜索的两个项目作为不同的集合获取,只需将它们作为一个集合获取即可。删除)(之间的\d+and \D,这将返回一个包含您要查找的整个字符串的集合。

结果—— regexp_matches('123A America, 234B Britania', '(\d+\D)' )

这只会找到第一个匹配项。要获取所有匹配的子字符串,请使用g标志 - regexp_matches('123A America, 234B Britania', '(\d+\D)', 'g')

于 2013-10-28T15:38:05.287 回答
0

@Scott S 的好答案但是,如果您无法在一个捕获组中实现所需的功能,则解决方案是编写一个函数,将正则表达式结果分配给一个变量,然后使用它。

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;
于 2015-02-28T01:26:55.553 回答