【发布时间】:2012-02-08 17:30:55
【问题描述】:
我有一个用以下格式的字符串填充的向量:<year1><year2><id1><id2>
向量的第一个条目如下所示:
199719982001
199719982002
199719982003
199719982003
对于第一个条目,我们有:year1 = 1997, year2 = 1998, id1 = 2, id2 = 001。
我想写一个正则表达式来提取year1、id1和id2的不为零的数字。所以对于第一个条目,正则表达式应该输出:199721。
我已尝试使用 stringr 包执行此操作,并创建了以下正则表达式:
"^\\d{4}|\\d{1}(?<=\\d{3}$)"
要提取 year1 和 id1,但是当使用后向显示时,我得到一个“无效的正则表达式”错误。这让我有点不解,R不能处理前瞻和后瞻吗?
【问题讨论】:
-
查看帮助页面
regex。perl=TRUE支持 Lookbehind。所以regexp("^\\d{4}|\\d{1}(?<=\\d{3}$)",s)不会抛出错误,而是不会选择你想要的。 -
感谢您的提示!我知道正则表达式不会捕获所有内容,我只是在尝试一下 - 当我不断收到“无效的正则表达式”消息时被踩住了。
-
在 gsubfn 中使用
strapply时,此正则表达式有效,不需要前瞻或后瞻:L <- c("199719982001", "199719982002", "199719982003", "199719982003"); library(gsubfn); strapply(L, "^(....)....(.)0*(.*)", c, simplify = TRUE)
标签: regex r package text-mining