我在R中使用正则表达式遇到了一些麻烦。我使用了库字符串中的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” 再次感谢
答案 0 :(得分:12)
将正则表达式行更改为:
temp = str_extract(test,'word2.+?word3')
^
请注意,我添加?
使得.+
非贪婪(即它尽可能少地捕获,而不是在正则表达式中的下一个术语之前捕获所有内容)。
要提取所有事件,请使用:
temp = str_extract_all(test,'word2.+?word3')
答案 1 :(得分: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"
答案 2 :(得分:0)
使用base r:我们可以通过使用反向引用来捕获word3之前的所有输出
sub("(word3).*","\\1",test)
[1] "word1 something word2 something word3"