保持字符串在 R 中第一次出现模式

Keep string up to first occurrence of pattern in R

我想保留字符串直到第一次出现以下模式:小写字母后跟大写字母,再后跟小写字母。

例如

"This is My testString, how to keepUntil test"

我愿意returnThis is My test

这是我目前尝试失败的方法:

library("magrittr")

"This is My testString, how to keepUntil test" %>% gsub("(.*[a-z])[A-Z][a-z]?.*", "\1", .)

我们可以使用strsplit

strsplit(str1, "(?<=[a-z])(?=[A-Z])", perl = TRUE)[[1]][1]
#[1] "This is My test"

或与sub

sub("([A-Za-z ]+[a-z])[A-Z].*", "\1", str1)
#[1] "This is My test"

数据

str1 <- "This is My testString, how to keepUntil test"

您可以使用带有正则表达式捕获组的递归函数来始终提取所需模式的第一个(最左边)实例,而不管您的文本有多少部分。

regex <- "^(.*[a-z])[A-Z].*$"
text <- "This is My testString, how to keepUntil test"

library(stringr)

ExtractFirstPart <- function(Text,Regex) {
  firstpart <- str_match(Text,Regex)[2]
  if (is.na(firstpart)) {
    return(Text)
  } else {
    firstpart <- ExtractFirstPart(firstpart,Regex)
    return(firstpart)
  }
}

使用此功能,您将获得:

> ExtractFirstPart(text,regex)
[1] "This is My test"