r - 通过跳过特定单词之间的其他单词仅提取特定单词之后的数字

标签 r regex

我正在查找单词“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/

相关文章:

java - 拆分递归组

python - 十六进制的正则表达式

PHP 正则表达式分隔符

r - 在评估(替代(列表(...)), `_data`,parent.frame()): NAs introduced by coercion

r - 从 R 中的 excel 模拟增量计算

r - 如何删除字符串中的第n个字符?

java - 正则表达式去除单引号并保留撇号

java - 用任意数量的逗号和空格拆分字符串

regex - 使全局环境中的对象列表与某些字符串模式匹配

r - 如何在R中以固定间隔在向量中插入元素