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/

相关文章:

r - 在 R 曲线中绘制 Logscale()

R:使用 lapply 将新列添加到数据框列表中

r - 在 ggplot 中使用 ..prop.. 时如何为条形图着色?

regex - 如何替换字符串并保留其大写/小写

r - Betareg 导致内存分配问题

data.table `setkey()` 的逆序

sql - 如何使用正则表达式更新 SQL 表记录

php - 正则表达式查找后面没有字母的单词

java - Java中通过正则表达式验证名称

java - 如何使用 XSLT v1.0 插入文本而不是使用 XSLT v2.0 正则表达式?