R - 仅用一次替换多个出现的字符。正则表达式

Cam*_*teT 1 regex string replace r special-characters

我有以下字符串

str<-"Actividades   Financieras && Bancarias #### 23"
Run Code Online (Sandbox Code Playgroud)

我想删除多个间距、多个&&和多个#。我想得到:

Actividades Financieras & Bancarias # 23
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经尝试过

gsub("[^A-z0-9]+"," ",string)
Run Code Online (Sandbox Code Playgroud)

我明白了

"Actividades Financieras Bancarias 23"
Run Code Online (Sandbox Code Playgroud)

它会删除所有 # 和 &。

有没有办法保留一个字符。

谢谢。

Wik*_*żew 7

您可以使用

string <- "Actividades   Financieras && Bancarias #### 23"
gsub("([#&\\s])\\1+", "\\1", string, perl=TRUE)
# => [1] "Actividades Financieras & Bancarias # 23"
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示在线 R 演示

细节

  • ([#&\\s])-捕获组1匹配一个#&或空白
  • \\1+- 对第 1 组值匹配 1 次或多次的反向引用(由于+量词)。

匹配被替换为单个出现的捕获字符(\1占位符引用来自替换模式的组 1 值)。