Regex R中的正则表达式

Regex R中的正则表达式,regex,r,Regex,R,我在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" 问题是我想让它停在第一个字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"
问题是我想让它停在第一个字3,我不想要字符串的最后一部分。 有什么想法吗?多谢各位

如果我有

test="word1 something word2 something1 word3 something2 word3 something3 word2 something4 word3"
我想保留一个2大小的向量,比如“word2 something 1 word3”,“word2 something 4 word3”
再次感谢

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

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

要提取所有引用,请使用:

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

我认为您试图提取字符串中两点之间的每个事件。如果我错了,我道歉。这可以通过
qdap的
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" 

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

 sub("(word3).*","\\1",test)
 [1] "word1 something word2 something word3"

太好了,非常感谢。在接受答案之前,我必须稍等片刻,我会尽快回答!如果我想保留所有以word2开头并以word3结尾的句子,而不是唯一一个,你知道怎么做吗?@user1836529谢谢!但我不确定我是否理解你的下一个问题。。。你能换个说法吗?也许是一个例子?@user1836529你能检查一下我编辑的行吗?我不熟悉R,但希望它能工作!