我需要为spark.sql()作业编写一个regexp\u replace查询。如果值遵循下面的模式,则仅提取第一个连字符之前的单词并将其分配给目标列“name”,但如果模式不匹配,则应报告整个“name”。
图案:
值应以连字符分隔。任何值都可以出现在第一个连字符之前(可以是数字、字母、特殊字符甚至空格)
第一个连字符后面应紧跟两个单词,用连字符隔开(只能是数字、字母或字母数字)(注:不允许使用特殊字符和空格)
两个单词后面应该跟一个或多个数字,后面应该跟连字符。
最后一部分只能是一个或多个数字。
例如:
如果name=45-dsg5-gfdvh6-9890-7685,regexp\u replace的输出=45
如果name=,则regexp\u replace=的输出
如果name=-gf5-dfg5-asd5-98-00,则regexp\u的输出replace=-gf5-dfg5-asd5-98-00
我有
spark.sql("SELECT REGEXP_REPLACE(name , '-[^-]+-\\w{2}-\\d+-\\d+$','',1,1,'i') AS name").show();
但它不起作用。
1条答案
按热度按时间cwdobuhd1#
使用
见证据。替换为
$1
. 如果$1
不起作用,使用\1
. 如果\1
不工作使用\\1
.解释