【问题标题】:Regex issue in regexp_replace [duplicate]regexp_replace 中的正则表达式问题 [重复]
【发布时间】:2020-06-14 15:22:00
【问题描述】:

问题

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

【问题讨论】:

  • test = regexp_replace(test, "[&lt;&gt;+/-]", "_") 不工作吗?
  • 感谢@WiktorStribiżew 的贡献。这工作,非常感谢!奇怪,我记得我也试过这个......

标签: java r regex sparkr


【解决方案1】:

不确定 sparkr 是如何工作的,但您可以执行以下操作:

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

对于/,您可能必须这样做:

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

【讨论】:

  • 感谢@Federico Piaxxa 的贡献。这工作,非常感谢!
  • 您永远不需要在字符串文字模式中转义 // 在任何正则表达式中都没有什么特别之处。
  • @WiktorStribiżew 它不仅取决于正则表达式引擎,还取决于解析器。简单的例子......检查这个regex101.com
  • @FedericoPiazza 我没有说你不应该在正则表达式分隔符字符是斜杠的正则表达式文字中转义它。我说过“在字符串文字模式中”你不必这样做。 regex101.com 上的简单示例 - regex101.com/r/jlbUEn/2。更多示例:JSPythonGo...斜杠不是特殊的正则表达式元字符
猜你喜欢
  • 1970-01-01
  • 2019-06-28
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2012-08-11
  • 2021-07-09
相关资源
最近更新 更多