str_extract: 从字符串中提取第 n 个单词
str_extract: Extracting exactly nth word from a string
我知道这个问题已经在好几个地方被问过了,但是我没有看到一个准确的答案。
所以我试图在正则表达式的帮助下从 R 中的字符串 ("trying to") 中准确提取第二个单词。我不想使用 unlist(strsplit)
sen= "I am trying to substring here something, but I am not able to"
str_extract(sen, "trying to\W*\s+((?:\S+\s*){2})")
理想情况下我想得到 "here" 作为输出,但我得到 "trying to substring here"
您可以使用 strsplit
。首先将 sen
在 "trying to "
处分成两部分,然后提取第二部分的第二个单词。
sapply(strsplit(sen, "trying to "), function(x) unlist(strsplit(x[2], " "))[2])
#[1] "here"
我们可以使用sub
sub("^.*\btrying to\s+\w+\s+(\w+).*", "\1", sen)
#[1] "here"
你实际上可以捕获你需要的单词 str_match
:
str_match(sen, "trying to\W+\S+\W+(\S+)")[,2]
或
str_match(sen, "trying to\s+\S+\s+(\S+)")[,2]
这里,\S+
匹配1个或多个非空格字符,\W+
匹配1个或多个非单词字符,\s+
匹配1+个空格。
请注意,如果您的 "words" 由多个空格(例如标点符号)分隔,请使用 \W+
。否则,如果只有空格,请使用 \s+
.
[,2]
将访问第一个捕获的值(与第一对未转义括号内的模式部分匹配的文本部分)。
既然你也标记了 stringr
,我会 post word
解决方案,
library(stringr)
word(sub('.*trying to ', '', sen), 2)
#[1] "here"
str_split
有时是一个流行的选择。使用 [1,2] 调用第 n 个单词,其中 returns 第二个单词, [1,3] 表示第三个,依此类推。
library(stringr)
#Data
sen= "I am trying to substring here something, but I am not able to"
#Code
str_split(sen, boundary("word"), simplify = T)[1,2]
#> [1] "am"
由 reprex package (v0.2.0) 创建于 2018-08-16。
我知道这个问题已经在好几个地方被问过了,但是我没有看到一个准确的答案。
所以我试图在正则表达式的帮助下从 R 中的字符串 ("trying to") 中准确提取第二个单词。我不想使用 unlist(strsplit)
sen= "I am trying to substring here something, but I am not able to"
str_extract(sen, "trying to\W*\s+((?:\S+\s*){2})")
理想情况下我想得到 "here" 作为输出,但我得到 "trying to substring here"
您可以使用 strsplit
。首先将 sen
在 "trying to "
处分成两部分,然后提取第二部分的第二个单词。
sapply(strsplit(sen, "trying to "), function(x) unlist(strsplit(x[2], " "))[2])
#[1] "here"
我们可以使用sub
sub("^.*\btrying to\s+\w+\s+(\w+).*", "\1", sen)
#[1] "here"
你实际上可以捕获你需要的单词 str_match
:
str_match(sen, "trying to\W+\S+\W+(\S+)")[,2]
或
str_match(sen, "trying to\s+\S+\s+(\S+)")[,2]
这里,\S+
匹配1个或多个非空格字符,\W+
匹配1个或多个非单词字符,\s+
匹配1+个空格。
请注意,如果您的 "words" 由多个空格(例如标点符号)分隔,请使用 \W+
。否则,如果只有空格,请使用 \s+
.
[,2]
将访问第一个捕获的值(与第一对未转义括号内的模式部分匹配的文本部分)。
既然你也标记了 stringr
,我会 post word
解决方案,
library(stringr)
word(sub('.*trying to ', '', sen), 2)
#[1] "here"
str_split
有时是一个流行的选择。使用 [1,2] 调用第 n 个单词,其中 returns 第二个单词, [1,3] 表示第三个,依此类推。
library(stringr)
#Data
sen= "I am trying to substring here something, but I am not able to"
#Code
str_split(sen, boundary("word"), simplify = T)[1,2]
#> [1] "am"
由 reprex package (v0.2.0) 创建于 2018-08-16。