regexp_replace 中的正则表达式问题

Regex issue in regexp_replace

问题

SparkR 的 regexp_replace 应遵循 Java 正则表达式规则,但我很难识别某些符号。

Reprex

在这个代表中,我设法识别“<”、“-”和“/”,但不是“>”或“+”。

# Load packages
library(tidyverse)
library(sparklyr)
library(SparkR)

# Create data
df <- data.frame(test = c("<5", ">5", "3(a)", "a-a", "b+b", "c/c", "d  d", "3..3"))

# Transfer data to Spark memory
df <- copy_to(sc, df, "df", overwrite = TRUE)

# Modify data
df1 <- df %>%
  dplyr::mutate(
    test = regexp_replace(test, "[<]", "_"),
    test = regexp_replace(test, "[>]", "_"),
    test = regexp_replace(test, "[-]", "_"),
    test = regexp_replace(test, "[+]", "_"),
    test = regexp_replace(test, "[/]", "_"))


# Collect and print results
df2 <- df1 %>% as.data.frame()
df2

解决方案

# Load packages
library(tidyverse)
library(sparklyr)
library(SparkR)

# Create data
df <- data.frame(test = c("<5", ">5", "3(a)", "a-a", "b+b", "c/c", "d  d", "3..3"))

# Transfer data to Spark memory
df <- copy_to(sc, df, "df", overwrite = TRUE)

# Modify data
df1 <- df %>%
  dplyr::mutate(
    test = regexp_replace(test, "[<>+/-]", "_"))


# Collect and print results
df2 <- df1 %>% as.data.frame()
df2

不确定 sparkr 是如何工作的,但你可以这样做:

df1 <- df %>%
  dplyr::mutate(
    test = regexp_replace(test, "[<>+/-]", "_"),

/ 的情况下,您可能必须这样做:

    test = regexp_replace(test, "[<>+\/-]", "_"),