Spark中使用rlike匹配含COIN字段并排除指定字符串的正则优化
修改后的Scala正则表达式实现
需求回顾
需要检查DataFrame的company_name列值:
- 包含
COIN相关内容,但排除CRYPTOCOIN、KUCOIN、COINBASE这三个字符串 - 同时匹配
BTCBIT.NET
修改后的代码
val CRYPTO_CARD_INDICATOR: String = "(?!.*(CRYPTOCOIN|KUCOIN|COINBASE)).*COIN.*|BTCBIT\\.NET" val CryptoCheckDataset = df.withColumn( "is_crypto_indicator", when(upper(col("company_name")).rlike(CRYPTOCOIN_CARD_INDICATOR), 1).otherwise(0) )
正则逻辑拆解
(?!.*(CRYPTOCOIN|KUCOIN|COINBASE)):负向先行断言,确保字符串里不包含指定的三个排除项.*COIN.*:匹配任意包含COIN的字符串(.*代表任意字符可出现任意次数)|BTCBIT\\.NET:逻辑或规则,直接匹配BTCBIT.NET(正则中点号是通配符,必须用\\.转义才能表示实际的点字符)
补充说明
因为代码中已经通过upper(col("company_name"))将列值转为大写,所以正则直接使用大写匹配即可,无需额外添加忽略大小写的标记。
内容的提问来源于stack exchange,提问作者sk306
相关产品推荐
相关产品推荐

