str_extract:从字符串中精确提取第 n 个单词

Man*_*rma 7 regex string r 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})")
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将“此处”作为输出,但我得到“尝试在此处进行子串”

Sot*_*tos 5

既然你也标记了stringr,我将发布word解决方案,

library(stringr)

word(sub('.*trying to ', '', sen), 2)
#[1] "here"
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 2

您实际上可以使用以下命令捕获您需要的单词str_match

str_match(sen, "trying to\\W+\\S+\\W+(\\S+)")[,2]
Run Code Online (Sandbox Code Playgroud)

或者

str_match(sen, "trying to\\s+\\S+\\s+(\\S+)")[,2]
Run Code Online (Sandbox Code Playgroud)

这里,\S+匹配 1 个或多个除空格之外的字符,\W+匹配 1 个或多个除单词字符之外的字符,并\s+匹配 1+ 个空格。

请注意,如果您的“单词”之间的空格(例如标点符号)以上,请使用\W+. 否则,如果只有空格,请使用\s+.

[,2]访问第一个捕获的值(与第一对未转义括号内的模式部分匹配的文本部分)。