如何从 R 列值中删除前几个字符?

Din*_*nho 2 regex r

我有一列由“|”分隔的值组成 并生成了此代码,但它需要“|”之前的所有内容,而不是之后。请记住,此列是一个“因素”。

INV | Building One
BO | Building Twenty Five
VC | Corporate

sub("([A-Za-z]+).*", "\\1"
Run Code Online (Sandbox Code Playgroud)

如何删除“|”之前的第一部分 并在 R 中使用“sub”仅保留所有内容?

预期输出:

Building One
Building Twenty Five
Corporate

Run Code Online (Sandbox Code Playgroud)

JBG*_*ber 5

您正在寻找的正则表达式是".*?\\|".

  • . 匹配所有字符
  • * 零次或多次
  • ?*“懒惰”
  • \\|匹配“|” 这也是一个正则表达式,所以它必须被转义

测试:

df <- data.frame(col1 = c("INV | Building One", 
                          "BO | Building Twenty Five",
                          "VC | Corporate"))

sub(".*?\\|", "", df$col1)
#> [1] " Building One"         " Building Twenty Five" " Corporate"
Run Code Online (Sandbox Code Playgroud)

这是我用于此类内容的出色正则表达式备忘单:https : //rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf

顺便说一句:tidyr带有一个很好的小功能,可以在这里提供帮助:

library(tidyr)
df %>% 
  separate(col1, into = c("col1", "col2"), sep = "\\|")
#>   col1                  col2
#> 1 INV           Building One
#> 2  BO   Building Twenty Five
#> 3  VC              Corporate
Run Code Online (Sandbox Code Playgroud)

它将您的一列分成两列,这在这里似乎是合理的。