我有这样的字符串,带有嵌入式ID。 Id应该是9个连续数字,但通常是这样写的。我只想提取ID,然后消毒,以便其9个连续数字
ID OF 20067 8641 IS RELATED
WITH40106117 7.
AND 301287 532
OR 301 287 532
此正则表达式解释了(用\ 1 \ 2代替)上面的第一个和第三个示例。我不知道第二个和第四个示例。
.*[\s]([0-9]{1,9})\s([0-9]{1,9}).*
https://regex101.com/r/zEhSsy/1/
我正在使用 regexp_replace 写这篇文章,但是只有正则表达式解决方案可以。
答案 0 :(得分:1)
如果数字之间只有空格,则可以删除它们并提取9位数字的序列。
with t as --test data
(
select s::text from
( VALUES ( 'ID OF 20067 8641 IS RELATED'),
('WITH40106117 7.'),
('AND 301287 532 '),
('OR 301 287 532') ) as s
) --test data ends
select s,SUBSTRING ( replace(s,' ','') FROM '\d{9}' ) as id from t;