r - 如何通过R的逆模式提取子串?

标签 r regex string

我尝试使用 gsub() R 函数按模式提取子字符串。

# Example: extracting "7 years" substring.
string <- "Psychologist - 7 years on the website, online"
gsub(pattern="[0-9]+\\s+\\w+", replacement="", string)`

`[1] "Psychologist -  on the website, online"

如您所见,使用 gsub() 很容易排除所需的子字符串,但我需要反转结果并仅获得“7 年”。
我考虑使用“^”,类似这样:
gsub(pattern="[^[0-9]+\\s+\\w+]", replacement="", string)
拜托,有人可以帮我正确的正则表达式模式吗?

最佳答案

您可以使用

sub(pattern=".*?([0-9]+\\s+\\w+).*", replacement="\\1", string)

this R demo .

详情
  • .*? - 任何 0+ 个字符,尽可能少
  • ([0-9]+\\s+\\w+) - 捕获组 1:
  • [0-9]+ - 一位或多位数字
  • \\s+ - 1 个或多个空格
  • \\w+ - 1 个或多个字字符
  • .* - 字符串的其余部分(任何 0+ 个字符,尽可能多)
  • \1在替换中替换为第 1 组的内容。

    关于r - 如何通过R的逆模式提取子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46951960/

    相关文章:

    r - 使用 fwrite r 打印时禁用指数表示法

    r - 为什么 summary 和 class 方法在 R 中的 data.frame 类型上不一致?

    java - 为什么我在 String 源代码中看到构造函数,但在 JavaDocs 中却看不到?

    java - 从字符串中提取模式

    r - dplyr group_by 列名向量?

    r - 运行mlr包中的predict()函数时出错

    javascript - 正则表达式

    java - Java中最快的子串搜索方法是什么

    regex - 仅使用 regxp 是否可以匹配出现多次的任何宽字符?

    c++ - 公共(public) : static constant string declaraion/initialization issue