簡體   English   中英

從字符串中提取滿足長度條件的單詞

[英]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


選項2,選擇所有短詞(最大長度為4):

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

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

要么…

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM