我知道在几个地方已经问过这个问题,但我没有看到这个问题的确切答案。
所以我试图在正则表达式的帮助下从R中精确地提取字符串中的第二个单词(“试图”)。我不想使用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”作为输出,但我正在“尝试在此处进行子串”
请帮帮我
答案 0 :(得分:2)
我们可以使用:scriptnames
sub
答案 1 :(得分:2)
您实际上可以使用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+
匹配除字符之外的一个或多个字符,\s+
匹配1个以上的空格。
请注意,如果你的"单词"使用\W+
以超过空格(例如标点符号)分隔。否则,如果只有空格,请使用\s+
。
[,2]
将访问第一个捕获的值(与第一个未转义的括号内的模式部分匹配的文本部分)。
答案 2 :(得分:2)
由于您还标记了stringr
,我将发布word
解决方案
library(stringr)
word(sub('.*trying to ', '', sen), 2)
#[1] "here"
答案 3 :(得分:1)
您可以使用strsplit
。首先将sen
分成两部分"trying to "
,然后提取第二部分的第二个字。
sapply(strsplit(sen, "trying to "), function(x) unlist(strsplit(x[2], " "))[2])
#[1] "here"
答案 4 :(得分:0)
str_split
有时是一个流行的选择。使用[1,2]调用第n个单词,它返回第二个单词,第三个返回[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创建。