我有这些样本值
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\u 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
两者都会产生错误
4条答案
按热度按时间f5emj3cl1#
功能
regexp_extract
需要3个参数。列值
正则表达式模式
组索引
中缺少最后一个参数
regexp_extract
功能。检查以下代码。
cmssoen22#
一个正则表达式可能是
(?<=prm_\d+\s+)P\d+
除了搜索p形式的字符串,其中是数字,它还检查这些字符串前面是否有prm\形式的字符串,其中*是数字。请记住区分大小写。上面的解决方案是区分大小写的(如果您的输入是prm,那么您的匹配将被丢弃)。我不熟悉apachespark,但是我假设它支持参数,例如/i,因为其他平台表明regex应该是不区分大小写的。
regexr.com演示
oyt4ldly3#
表达式为:
qyyhg6bp4#
只需选择组0