2017-10-17 96 views
1

我正在尋找從字符串中提取年份。這總是出現在「X」之後,「之前」。然後是一串其他字符。stringr str_extract捕獲組捕獲所有內容

使用stringr的str_extract我想以下幾點:

year = str_extract(string = 'X2015.XML.Outgoing.pounds..millions.', pattern = 'X(\\d{4})\\.') 

我認爲括號,定義捕獲組,返回「2015」,但實際上我得到了完全匹配「X2015」。

我是不是做正確嗎?爲什麼我不修剪「X」和「。」?

回答

1

捕獲組在這種情況下無關緊要。函數str_extract將返回包含捕獲組之前和之後字符的整個匹配。

您必須改用lookbehead和lookahead。它們的長度是零。

library(stringr) 
str_extract(string = 'X2015.XML.Outgoing.pounds..millions.', 
      pattern = '(?<=X)\\d{4}(?=\\.)') 
# [1] "2015" 

此正則表達式匹配由一個X之前和之後一.四個連續的數字。

+0

感謝澄清爲什麼它不工作,這對我的整體理解 – User632716

+1

@ User632716你真的有用歡迎! –

1

或者,你可以使用gsub

string = 'X2015.XML.Outgoing.pounds..millions.' 

gsub("X(\\d{4})\\..*", "\\1", string) 
# [1] "2015" 

str_replacestringr

library(stringr) 
str_replace(string, "X(\\d{4})\\..*", "\\1") 
# [1] "2015"