【问题标题】:Regex in R: matching the string before a sequence of charactersR中的正则表达式:在字符序列之前匹配字符串
【发布时间】:2017-03-25 05:22:45
【问题描述】:

我想提取某个单词之前的部分字符串。例如。我想得到“,没用”之前的一切。

a <- "Experiment A, useless (03/25)"
b <- grep('^[^useless]+', a, perl=T)
regmatches(a,b)

这应该返回“实验 A”。

但是,这不起作用。 R给出“子字符串中的错误(x [ind],所以,eo):无效的子字符串参数”。

【问题讨论】:

  • 如果你想将结果传递给regmatches,你需要regexpr而不是grep

标签: r regex


【解决方案1】:

我们可以使用sub 匹配, 后跟零个或多个空格(\\s*)后跟“无用”和其他字符(.*),并将其替换为空白("" )

sub(",\\s*useless\\b.*", "", a)
#[1] "Experiment A"

【讨论】:

    【解决方案2】:

    为此进行了前瞻:

    b <- regexpr(".*(?=, useless)", a, perl=TRUE)
    regmatches(a, b)
    ## [1] "Experiment A"
    

    .* 匹配任何字符序列,但前瞻(?=, useless) 表示它只匹配后面跟着字符串“, useless”的文本。

    【讨论】:

      【解决方案3】:

      sub("(\\w*), useless.*","\\1",a)

      【讨论】:

        【解决方案4】:
        sub('(.*),.*','\\1', a, perl=T)
        [1] "Experiment A"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 2020-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多