regex - 不要提取错误的子字符串/数字
问题描述
我正在使用 PostgreSQL 中的地址数据,需要提取 4 位邮政编码。
我有一些地址,例如“UNIT 1503 CENTER RD CLAYTON VIC 3168 1503, AU”,其中“3168”对应于我的邮政编码。
我尝试过的所有内容都将“1503”提取为错误的邮政编码。在其余地址中,不是邮政编码的 4 位数字(例如“1503”)在地址中出现两次。在大多数情况下,第二个数字出现在逗号之前(但我不确定这是否适用于所有人)。
以下代码为我提供了一个包含所有 4 位数字的列表:
select array_to_string(regexp_matches('1503 CENTRE RD CLAYTON VIC 3168 1503, AU', '\m[0-9]{4}\M', 'g'), '')
但是当我更新我的列'postal_code'时,只使用第一行。
我需要一个代码来首先检查是否有多个 4 位数字。如果是这种情况,我需要实现以下规则(我不知道如何):“如果字符串中有多个 4 位数字,则只提取唯一的数字(3168);摆脱出现两次的数字”。
解决方案
你快到了。
with t(id,x) as (values
(1,'1503 CENTRE RD CLAYTON VIC 3168 1503, AU'::text),
(2,'1111 2222 3333 1111'))
select id, n[1]
from t, regexp_matches(x, '\m\d{4}\M', 'g') as n
group by id, n[1]
having count(*) = 1; -- Check for uniqueness
推荐阅读
- java - 如何在 spring-cloud-stream-binder-kinesis 中使用 STSAssumeRoleSessionCredentialsProvider 进行配置
- winforms - 在winforms用户控件中托管一个对话框?
- python - 使用过滤器功能和 for 循环过滤多个数据帧
- node.js - Discord.js 机器人有没有办法检查提及?
- r - 结合边属性生成顶点属性
- azure - 从 Plesk 域控制器到 Azure 的 DNS 传输
- python - 如何消除 B210 USRP 传输的失真?
- node.js - Firebase nodejs admin sdk - 从 Firebase 存储中删除文件会导致套接字挂起错误
- c++ - 在 C++ 的构造函数中引用变量
- selenium - 运行 .exe 时出现 ERR_TUNNEL_CONNECTION_FAILED(由 pyinstaller 生成)