3

我在 R 中的正则表达式遇到了一些问题。我使用库 stringr 中的 str_extract ,我的问题是:

library(stringr)
test="word1 something word2 something word3 something word3"
temp = str_extract(test,'word2.+word3')
print(temp)
## [1] "word2 something word3 something word3"

问题是我希望它在第一个 word3 处停止,我不想要字符串的最后一部分。请问有什么想法吗?非常感谢您

如果我有

test="word1 something word2 something1 word3 something2 word3 something3 word2 something4 word3"

并且我想保留一个 2 大小的向量,例如“word2 something1 word3”、“word2 something4 word3”,再次感谢

4

3 回答 3

12

将您的正则表达式行更改为:

temp = str_extract(test,'word2.+?word3')
                                ^

请注意,我添加了?这使得.+非贪婪(即它捕获尽可能少,而不是在正则表达式中的下一个术语之前捕获所有内容)。

要提取所有事件,请使用:

temp = str_extract_all(test,'word2.+?word3')
于 2013-05-01T17:48:33.860 回答
3

我认为您正在尝试提取字符串中两点之间的每次出现。如果我错了,我很抱歉。这可以通过qdap's genXtract和 设置来完成with = TRUE。这也不是stringr答案:

test="word1 something word2 something1 word3 something2 word3 something3 word2 something4 word3"

library(qdap)
genXtract(test, left = "word2", right = "word3", with=TRUE)

## > genXtract(test, "word2", "word3", with=TRUE)
##         word2  :  word31         word2  :  word32 
## "word2 something1 word3" "word2 something4 word3" 
于 2013-05-01T18:43:11.683 回答
0

使用 base r:我们可以通过使用反向引用来捕获 word3 之前的所有输出

 sub("(word3).*","\\1",test)
 [1] "word1 something word2 something word3"
于 2017-12-24T10:09:37.080 回答