我正在查找单词“years”之前的两位数字和单词“years”之后的七位或八位数字。数据示例如下所示。
data <- "mr john is 45 years old his number is 12345678, mr doe is 57 years 7654321"
data <- as.list(data)
我尝试了这种方法,并成功地在“years”一词之前获取了两位数字:
stringr::str_extract_all(data,regex(".\\d{2}\\s(?:year)"))
我也尝试过这种方法来获取单词“years”后面的数字:
str_extract_all(data,regex(".\\d{2}\\s(?:year).\\d{7,8}"))
我设法获得了直接出现在单词“years”之后的数字:
" 57 year 7654321"
但是,我未能成功获取“years”一词后面的八位数字,其中在数字和“years”一词之间包含其他字符。
如何通过跳过其他单词/字符来仅检索单词“years”之后的数字?
非常感谢您的帮助
最佳答案
我们可以使用str_replace
来匹配并删除“年份”前后的非数字,然后提取包括“年份”在内的年份前后的数字
library(stringr)
str_extract_all(str_replace_all(data,
"(?<=years)\\D+|(\\D+)(?=years)", " "), "\\d{2}\\s+years\\s+\\d{7,8}")[[1]]
[1] "45 years 12345678" "57 years 7654321"
或者另一种选择是使用 str_match
捕获数字以及“years”子字符串,然后将它们粘贴
在一起
library(purrr)
library(dplyr)
str_match_all(data, "(\\d{2})\\D+(years)\\D+(\\d{7,8})")[[1]][,-1] %>%
as.data.frame %>%
invoke(str_c, sep =" ", .)
[1] "45 years 12345678" "57 years 7654321"
数据
data <- "mr john is 45 years old his number is 12345678, mr doe is 57 years 7654321"
关于r - 通过跳过特定单词之间的其他单词仅提取特定单词之后的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70050241/