我正在尋找一個位于“years”一詞之前的兩位數字和一個位于“years”一詞之后的七位或八位數字。資料示例如下所示。
data <- "mr john is 45 years old his number is 12345678, mr doe is 57 years 7654321"
data <- as.list(data)
我嘗試了這種方法,并成功地在“年”這個詞之前獲得了兩位數:
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”之后檢索數字?
我真的很感謝你的幫助
uj5u.com熱心網友回復:
我們可能會使用str_replace匹配和洗掉'years'前后的非數字,然后提取包括'years'在內的年份前后的數字
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然后將paste它們放在一起
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"
uj5u.com熱心網友回復:
這是一個基本的R方法:
- 創建一個
strsplit分隔的串列, - 定義一個函式
my_func,該函式接受一個字串并在年前和年后搜索數字,然后將所有內容粘貼在一起。 - 使用
lapply你的函式應用于串列。 - 使用
toString()來獲得預期的輸出。
my_list <- strsplit(data, ",")
my_func <- function(x){
a <- as.integer(sub(".*?(\\d )\\s*year.*", "\\1", x))
b <- as.integer(sub(".*?year.*?(\\d ).*", "\\1", x))
paste(a, "year", b)
}
result <- lapply(my_list, my_func)
lapply(result, toString)
輸出:
[[1]]
[1] "45 year 12345678, 57 year 7654321"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/361849.html
