Regex R str_extract:从字符串

时间:2017-08-02 14:38:08

标签: r regex string stringr

我知道在几个地方已经问过这个问题,但我没有看到这个问题的确切答案。

所以我试图在正则表达式的帮助下从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”作为输出,但我正在“尝试在此处进行子串”

请帮帮我

5 个答案:

答案 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创建。