簡體   English   中英

R中的正則表達式

[英]Regular expression in 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"

問題是我希望它停在第一個word3,我不想要字符串的最后一部分。 有什么好主意嗎? 非常感謝你

如果我有

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

並且我希望保留像這樣的“word2 something1 word3”,“word2 something4 word3”的2尺寸矢量再次感謝

將您的正則表達式行更改為:

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

請注意我添加了? 這使得.+非貪婪(即它捕獲盡可能少,而不是在正則表達式中的下一個術語之前捕獲所有內容)。

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

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

我認為你試圖提取字符串中兩點之間的每一個事件。 如果我錯了,我道歉。 這可以通過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" 

使用base r:我們可以使用反向引用捕獲word3之前的所有輸出

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM