在R中使用str_extract在带有正则表达式的子字符串之前提取数字

Har*_*y M 4 regex r stringr tidyverse

我想在stringr包中使用str_extract从表单的字符串中提取数字XX nights etcetc

我目前正在这样做:

library(stringr)

str_extract("17 nights$5 Days", "(\\d)+ nights")
Run Code Online (Sandbox Code Playgroud)

但这又回来了

"17 nights"

代替17

如何只提取数字?我以为用括号指定提取组会起作用,但是没有用。

Dav*_*e2e 5

您可以使用先行快递 (?=)

library(stringr)

str_extract("17 nights$5 Days", "(\\d)+(?= nights)")
Run Code Online (Sandbox Code Playgroud)

后面的外观(?<=)也可以派上用场。

一个很好的参考是Rstudio网站上的备忘单:https : //github.com/rstudio/cheatsheets/raw/master/regex.pdf

  • 最好是(\\ d +)或`\\ d +` (2认同)

Ron*_*hah 5

在基数 R 中,我们可以用来sub提取前面的数字"nights"

as.integer(sub("(\\d+)\\s+nights.*", "\\1","17 nights$5 Days"))
#[1] 17
Run Code Online (Sandbox Code Playgroud)

或者,如果数字始终是字符串中的第一个数字,我们可以使用readr::parse_number

readr::parse_number("17 nights$5 Days")
#[1] 17
Run Code Online (Sandbox Code Playgroud)