首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rlike regex不处理特殊字符

rlike regex不处理特殊字符
EN

Stack Overflow用户
提问于 2021-09-19 06:01:14
回答 1查看 237关注 0票数 1

我很难获得(java) spark的rlike方法来处理特殊字符。通常,简单的转义、\\或引用\Q\E足以处理正则表达式中的特殊字符,但它们似乎不起作用。

以下面的示例代码为例。它应该将第2行和第3行显示为匹配alist中的一个项,忽略大小写。但是,下面的代码只显示第2行为匹配。

如何根据与alist中某一项匹配的“动物”列筛选数据集的行

代码语言:javascript
复制
    StructType schema = new StructType(new StructField[]{
            new StructField("row_id", DataTypes.IntegerType, false, Metadata.empty()),
            new StructField("animal", DataTypes.StringType, false, Metadata.empty())
    });

    Dataset<Row> dataset = spark.createDataFrame(
            Arrays.asList(
                    RowFactory.create(1, "Bat"),
                    RowFactory.create(2, "Dog"),
                    RowFactory.create(3, "Cat (Type Not Stated)"),
                    RowFactory.create(4, "Other.")
            ), schema);


    List<String> alist = Arrays.asList(
            "\\QDOG\\E",
            "\\QCat (Type Not Stated)\\E");

    dataset = dataset.filter(dataset.col("animal").rlike(
            "(?i)\\b("+String.join("|", alist)+")\\b"
    ));

    dataset.show(5, false);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-19 07:09:12

您的问题不是\\Q\\E模式,而是\\b单词边界模式。

如果我通过删除rlike模式来更改最终的\\b regexp,如下所示:

代码语言:javascript
复制
dataset = dataset.filter(dataset.col("animal").rlike(
  "(?i)("+String.join("|", alist)+")"
));

我知道这两条线:

代码语言:javascript
复制
+------+---------------------+
|row_id|animal               |
+------+---------------------+
|2     |Dog                  |
|3     |Cat (Type Not Stated)|
+------+---------------------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69240709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档