我对正则表达式比较陌生,而且我正陷入死胡同.我有一个数据框,其列如下所示:
year1 GMM14_2000_NGVA GMM14_2001_NGVA GMM14_2002_NGVA ... GMM14_2014_NGVA
我试图在字符串中间提取年份(2000,2001等).到目前为止,这是我的代码
gsub("[^0-9]","",year1))
返回数字,但它也返回14作为字符串的一部分:
142000 142001
有关如何从模式中排除14或如何更有效地提取年份信息的任何想法?
谢谢
解决方法
@H_403_32@ 使用以下gsub:s = "GMM14_2002_NGVA" gsub("^[^_]*_|_[^_]*$",s)
正则表达式细分:
比赛…
> ^ [^ _] * _ – 从字符串和a_开头的_以外的0个或更多字符
> | – 要么…
> _ [^ _] * $ – 字符串末尾的_和0以外的字符
并删除它们.
作为备选,
library(stringr) str_extract(s,"(?<=_)\\d{4}(?=_)")
Perl-like正则表达式匹配用下划线括起来的4位子字符串.