繁体   English   中英

从字符串中提取“单词”

[英]Extract “words” from a string

我有一个153行乘9列的表。 我感兴趣的是第一列中的字符串,我想从第四个单词中提取第四个单词并创建一个新列表,这个列表将是153行,1列。

此数据库表的第1列的前两行示例:

[1] Resistance_Test DevID (Ohms) 428
[2] Diode_Test SUBLo (V) 353

“单词”由空格分隔,因此第一行的第四个单词是“428”,第二行的第四个单词是“353”。 如何创建包含所有153行的第四个单词的新列表?

gsub()与正则表达式一起使用

x <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
ptn <- "(.*? ){3}"
gsub(ptn, "", x)

[1] "428" "353"

这是有效的,因为正则表达式(.*? ){3}恰好找到三个{3}字符集后跟一个空格(.*? ) ,然后用空字符串替换它。

有关更多信息,请参阅?gsub?regexp


如果您的数据具有您在问题中未提及的结构,那么正则表达式可能会变得更加容易。

例如,如果您始终对每行的最后一个字感兴趣:

ptn <- "(.*? )"
gsub(ptn, "", x)

或许你肯定知道你只能搜索数字并丢弃其他所有内容:

ptn <- "\\D"
gsub(ptn, "", x)

你可以使用stringr包中的word()

> x <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
> library(stringr)
> word(string = x, start = 4, end = 4)
[1] "428" "353"

指定开始和结束单词的位置相同,您将始终获得第四个单词。

我希望这有帮助。

我们可以使用sub 我们将模式匹配一​​个或多个非空白空间( \\\\S+ ),然后是一个或多个空格( \\\\s+ ),重复3次( {3} ),然后是在一个组中捕获的单词( (\\\\w+) )后跟一个或多个字符。 我们用第二个反向引用替换它。

sub("(\\S+\\s+){3}(\\w+).*", "\\2", str1)
#[1] "428" "353"

这由第n个字选择,所以

 sub("(\\S+\\s+){3}(\\w+).*", "\\2", str2)
 #[1] "428" "353" "428"

另一个选项是stri_extract

 library(stringi)
 stri_extract_last_regex(str1, "\\w+")
 #[1] "428" "353"

数据

str1 <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
str2 <- c(str1, "Resistance_Test DevID (Ohms) 428 something else")

如果您不熟悉正则表达式, strsplit函数可以帮助您:

data <- c('Resistance_Test DevID (Ohms) 428', 'Diode_Test SUBLo (V) 353')
unlist(lapply(strsplit(data, ' '), function(x) x[4]))
[1] "428" "353"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM