[英]Extract words that meet a length condition from string
我有一个专利数据集,当我导入IPC-类信息RI获取包含在一个变量量和一组我不需要数字空格的字符串。 以下是与专利文件相对应的IPC代码:
b <- "F24J 2/05 20060101AFI20150224BHEP F24J 2/46 20060101ALI20150224BHEP "
我想删除所有的空格和长字母数字字符串,只是让我感兴趣的数据,获得这样的数据帧,在这种情况下:
m <- data.frame(matrix(c("F24J 2/05", "F24J 2/46"), byrow = TRUE, nrow = 1, ncol = 2))
m
我正在尝试使用gsub,因为我知道长字符串的长度总是比我感兴趣的数据长得多:
x = gsub("\\b[a-zA-Z0-9]{8,}\\b", "", ipc)
x
但是,我被卡住,当我尝试以获得我想要的数据帧进行进一步清理这个对象。 我真的很固执,如果有人可以帮助我,我将不胜感激。
提前非常感谢您。
您可以使用str_extract_all
包中的stringr
,只要您知道要查找的模式即可:
library(stringr)
str_extract_all(b, "[A-Z]\\d{2}[A-Z] *\\d/\\d{2}")[[1]]
#[1] "F24J 2/05" "F24J 2/46"
选项1,选择所有噪声数据并使用替代将其消除:
/\s+|\w{5,}/g
(空格和“长”字)
https://regex101.com/r/lG4dC4/1
/\\b\\S{4}\\b/g
要么…
library(stringi)
library(readr)
read_fwf(paste0(stri_match_all_regex(b, "[[:alnum:][:punct:][:blank:]]{50}")[[1]][,1], collapse="\n"),
fwf_widths(c(7, 12, 31)))[,1:2]
## X1 X2
## 1 F24J 2/05
## 2 F24J 2/46
(这使我们假设-仅看到2个“记录”,即每个“记录”的长度为50个字符)
这是一种使用qdapRegex (我维护此程序包)+ magrittr的管道来使amtrix陷入困境的方法:
library(qdapRegex); library(magrittr)
b %>%
rm_white_multiple() %>%
rm_default(pattern="F[0-9A-Z]+\\s\\d{1,2}/\\d{1,2}", extract=TRUE) %>%
unlist() %>%
strsplit("\\s") %>%
do.call(rbind, .)
## [,1] [,2]
## [1,] "F24J" "2/05"
## [2,] "F24J" "2/46"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.