首页 > 解决方案 > 正则表达式查找字符串中的特定字符

问题描述

我有这些样本值

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

都产生错误

标签: sqlregexapache-sparkpyspark

解决方案


一个正则表达式可以是(?<=prm_\d+\s+)P\d+ 除了搜索 P* 形式的字符串(其中 * 是一个数字)之外,它还检查这些字符串前面是否有 prm_* 形式的字符串,其中 * 是一个数字。

请记住区分大小写。上面的解决方案是区分大小写的(如果您的输入是 PRM,那么您的匹配项将被丢弃。)我不熟悉 apache-spark 但我认为它支持 /i 等参数,因为其他平台表明正则表达式应该是大小写不敏感。

Regexr.com 演示


推荐阅读