【问题标题】:Keep string up to first occurrence of pattern in R将字符串保持到 R 中模式的第一次出现
【发布时间】:2016-06-10 08:18:17
【问题描述】:

我想将字符串保持为以下模式的第一次出现:小写字母后跟大写字母,再后跟小写字母。

例如

"This is My testString, how to keepUntil test"

我想回This is My test

这是我迄今为止尝试过的失败:

library("magrittr")

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

【问题讨论】:

    标签: regex r string text gsub


    【解决方案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"
    

    【讨论】:

    • 感谢akrun,非常感谢。
    【解决方案2】:

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

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-05
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多