Regex 仅选择后跟数字的字母

Regex 仅选择后跟数字的字母,regex,postgresql,Regex,Postgresql,我试图从PostgreSQl表中选择一些代码。 我只想要里面有数字的代码,例如 GD123 GD564 我不想选择任何类似“GDTG GDCNB”的代码 以下是我目前的疑问: select regexp_matches(no_, '[a-zA-Z0-9]*$') from myschema.mytable 这当然行不通。 感谢您的帮助。smth如: so=# with c(v) as (values('GD123'),('12345'),('GD ERT')) select v ~ '[A

我试图从PostgreSQl表中选择一些代码。 我只想要里面有数字的代码,例如

GD123 
GD564
我不想选择任何类似“GDTG GDCNB”的代码

以下是我目前的疑问:

select regexp_matches(no_, '[a-zA-Z0-9]*$')
from myschema.mytable
这当然行不通。 感谢您的帮助。

smth如:

so=# with c(v) as (values('GD123'),('12345'),('GD ERT'))
select v ~ '[A-Z]{1,}[0-9]+', v from c;
 ?column? |   v
----------+--------
 t        | GD123
 f        | 12345
 f        | GD ERT
(3 rows)
?..

您可以使用

CREATE TABLE tb1
    (s character varying)
;

INSERT INTO tb1
    (s)
VALUES
    ('GD123'),
    ('12345'),
    ('GDFGH')
;

SELECT * FROM tb1 WHERE s ~ '^(?![A-Za-z]+$)[a-zA-Z0-9]+$';
结果:

详细信息

  • ^
    -字符串的开头
  • (?![A-Za-z]+$)
    -如果字符串末尾只有字母,则会导致匹配失败的负前瞻
  • [a-zA-Z0-9]+
    -1个或多个字母数字字符
  • $
    -字符串结束
如果要避免匹配
12345
,请使用

'^(?![A-Za-z]+$)(?![0-9]+$)[a-zA-Z0-9]+$'
在这里,
(?![0-9]+$)
同样会使匹配失败,如果从字符串开始到字符串结束的所有字符都是数字。结果:


如果要获取的数据格式是一组字符,后跟一组数字(即GD123),则可以使用正则表达式:

         [a-zA-Z0-9]+[0-9]

匹配至少有一个字母后跟至少一个数字的字符串的模式是
'[a-Za-z]+[0-9]+'

现在,如果有效的模式必须以两个字母开头,然后如您的示例所示,后面有3个数字,那么将
+
分别替换为
{2}
&
{4}
,并将模式括在
^$
中,如下所示:
'^[A-Za-z]{2}[0-9]{3}$'

正则表达式匹配运算符是
~
,可以在where子句中使用:

SELECT no_
FROM myschema.mytable
WHERE no_ ~ '[A-Za-z]+[0-9]+'

这将捕获数字前面的每个数字和字母:

([A-z]+\d+)

那么
124566
呢?你是说条目不能都是数字或大写字母吗?对不起,我不明白。那怎么办?好的,试试
^(?![A-Za-z]+$)[A-Za-Z0-9]+$
好的,就这样