R:如何使用 stringr 提取子字符串作为输出来变异以字符串模式开头并以数字结尾的字符串列?

问题描述

我正在创建一个要放入 mutate() 的小示例。不知道为什么这不起作用。

> str_extract("rs1234-<b>C</b>","^rs*\\d$")
[1] NA

如果您能指出我对语言的误解而不是仅仅提供解决方案,我会很棒。我希望得到“rs1234”。

解决方法

^rs*\d$ 正则表达式匹配

  • ^ - 字符串的开始
  • rs* - r 以及零次或多次出现的 s 字符
  • \d - 一个数字
  • $ - 字符串结束。

因此,您的模式匹配 rsssss1r3 等字符串。

你需要

str_extract("rs1234-<b>C</b>","^rs\\d+")

其中 ^rs\d+ 匹配字符串开头的 rs,然后匹配一位或多位数字。见this regex demo

但是如果我只想要“rs”和最后一个数字之间的子字符串。我该怎么办?

您将使用 rs.*\d

str_extract("rs1234-<b>C</b>","rs.*\\d")

其中 rs.*\d 匹配 rs,然后是除换行符以外的任意零个或多个字符,然后是一个数字。

注意:如果您还需要匹配行尾,则需要在最后一个模式前添加 (?s) 内联 DOTALL 修饰符。

this regex demo