R 正则表达式回顾
我有一个填充以下格式字符串的向量:
向量的第一个条目如下所示:
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,但是当使用lookbehind时,我收到“无效的正则表达式”错误。这让我有点困惑,R 不能处理前瞻和后瞻吗?
I have a vector filled with strings of the following format: <year1><year2><id1><id2>
the first entries of the vector looks like this:
199719982001
199719982002
199719982003
199719982003
For the first entry we have: year1 = 1997, year2 = 1998, id1 = 2, id2 = 001.
I want to write a regular expression that pulls out year1, id1, and the digits of id2 that are not zero. So for the first entry the regex should output: 199721.
I have tried doing this with the stringr package, and created the following regex:
"^\\d{4}|\\d{1}(?<=\\d{3}$)"
to pull out year1 and id1, however when using the lookbehind i get a "invalid regular expression" error. This is a bit puzzling to me, can R not handle lookaheads and lookbehinds?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
既然这是固定格式,为什么不使用 substr 呢?
year1
使用substr(s,1,4)
提取,id1
使用substr(s,9,9)< 提取/code> 和
id2
为as.numeric(substr(s,10,13))
。在最后一个例子中,我使用as.numeric
来去掉零。Since this is fixed format, why not use substr?
year1
is extracted usingsubstr(s,1,4)
,id1
is extracted usingsubstr(s,9,9)
and theid2
asas.numeric(substr(s,10,13))
. In the last case I usedas.numeric
to get rid of the zeroes.您将需要使用
base
包中的gregexpr
。这有效:请注意
perl=TRUE
设置。有关更多详细信息,请参阅?regex
。从输出来看,您的正则表达式并没有捕获
id1
。You will need to use
gregexpr
from thebase
package. This works:Note the
perl=TRUE
setting. For more details look into?regex
.Judging from the output your regular expression does not catch
id1
though.您可以使用子。
You can use sub.