sql - 正则表达式查找字符串中的特定字符
问题描述
我有这些样本值
prm_2020 P02 United Kingdom London 2 for 2
prm_2020 P2 United Kingdom London 2 for 2
prm_2020 P10 United Kingdom London 2 for 2
prm_2020 P11 United Kingdom London 2 for 2
需要像这样找到P2,P02,P11,p06,p05,尝试在databricks中使用Regexp_extract函数。努力寻找正确的表达方式。一旦我从字符串中找到 P10、p6,我需要将数字放入名为 ID 的新列中
select distinct
promo_name
,regexp_extract(promo_name, '(?<=p\d+\s+)P\d+') as regexp_id
from stock
where promo_name is not null
select distinct
promo_name
,regexp_extract(promo_name, 'P[0-9]+') as regexp_id
from stock
where promo_name is not null
都产生错误
解决方案
一个正则表达式可以是(?<=prm_\d+\s+)P\d+
除了搜索 P* 形式的字符串(其中 * 是一个数字)之外,它还检查这些字符串前面是否有 prm_* 形式的字符串,其中 * 是一个数字。
请记住区分大小写。上面的解决方案是区分大小写的(如果您的输入是 PRM,那么您的匹配项将被丢弃。)我不熟悉 apache-spark 但我认为它支持 /i 等参数,因为其他平台表明正则表达式应该是大小写不敏感。
推荐阅读
- python - Dask DataFrame 是否适用于大型 Pandas DataFrame?
- java - Spring集成TCP服务器打印传入消息
- date - 在 ISO8601 日期中,UTC 时间可以用 +00:00 后缀表示吗?
- java - 更新方法struts 2-hibernate-jpa
- firebase - 用于更改密码的 Firebase 云函数监听器
- anychart - AnyChart 8.4.2:获取 Base64 图表字符串时出现服务器错误
- javascript - 在对象内插入按钮?
- html - 为什么文本节点出现在重叠元素的背景之上?
- c - LCD 上显示错误值
- swift - 将平移手势限制为设置帧