删除子文本数组之前的文本

标签 r regex substring str-replace gsub

我有一组需要操作的字符串。对于每个字符串,如果它们包含一组子字符串,我想保留该子字符串,否则保持不变。

下面是一个示例:

keep <- c("USA","UNITED STATES")
keep <- paste0(paste0(" ",keep,"$"),collapse="|")

data <- c("DETROIT","DETROIT USA","DETROIT UNITED STATES")
expected_result <- c("DETROIT","USA","UNITED STATES")

最佳答案

你可以使用

data <- c("DETROIT","DETROIT USA","DETROIT UNITED STATES")
keep <- c("USA","UNITED STATES")

regex <- paste0(".*\\s*\\b(",paste0(keep,collapse="|"), ")\\b")
sub(regex, "\\1", data)
## => [1] "DETROIT"       "USA"           "UNITED STATES"

请参阅R demo online .

正则表达式为.*\s*\b(USA|UNITED STATES)\b,参见its online demo .

详细信息:

  • .* - 任意零个或多个尽可能多的字符
  • \s* - 零个或多个空格
  • \b(USA|UNITED STATES)\b - 整个单词 USAUNITED STATES,捕获到第 1 组 (\1 在替换模式中)。

关于删除子文本数组之前的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66222589/

相关文章:

javascript - 匹配不以 & 开头的单词

正则表达式在文本中查找目录

c# - 如何找到多个子串

javascript - 使用 .split 从字符串中删除前缀会导致意外标记非法

r - 在 R 中使用 Plotly 绘制显示毫秒的时间戳

r - 以编程方式将 R Shiny 应用程序作为后台作业启动

string - 在包含字符串的字符数组中查找元素

r - 在数据框上应用 sqrt 函数

java - 正则表达式替换字符实例,但不在括号内

database - 在 CockroachDB 中创建索引时使用列名的子字符串