从字符串

时间:2015-09-09 18:45:41

标签: regex r

我有专利数据集,当我将IPC类信息导入R时,我得到一个字符串,其中包含可变数量的空格和一组我不需要的数字。以下是与专利文件相对应的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

但是当我尝试进一步清理这个对象以获得我想要的数据帧时,我会陷入困境。我真的很困惑,如果有人能帮助我,我真的很感激。

非常感谢你。

3 个答案:

答案 0 :(得分:1)

如果您了解所寻找的模式,则可以使用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 :(得分:1)

选项1,选择所有噪声数据并使用替换进行重新传输:

/\s+|\w{5,}/g

(Spaces和&#39; long&#39; words)

https://regex101.com/r/lG4dC4/1

<小时/> 选项2,选择所有短字(长度最大4):

/\b\S{4}\b/g

https://regex101.com/r/fZ8mH5/1

答案 2 :(得分:0)

以下是使用 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"