Tho*_*sen 6 regex r package text-mining
我有一个向量填充以下格式的字符串: <year1><year2><id1><id2>
向量的第一个条目如下所示:
199719982001
199719982002
199719982003
199719982003
Run Code Online (Sandbox Code Playgroud)
对于第一个条目,我们有:year1 = 1997,year2 = 1998,id1 = 2,id2 = 001.
我想写一个正则表达式,它取出year1,id1和id2的数字不为零.所以对于第一个条目,正则表达式应该输出:199721.
我尝试使用stringr包,并创建了以下正则表达式:
"^\\d{4}|\\d{1}(?<=\\d{3}$)"
Run Code Online (Sandbox Code Playgroud)
拉出year1和id1,然而当使用lookbehind我得到一个"无效的正则表达式"错误.这对我来说有点令人费解,R不能处理前瞻和外观吗?
您需要gregexpr从base包中使用.这有效:
> s <- "199719982001"
> gregexpr("^\\d{4}|\\d{1}(?<=\\d{3}$)",s,perl=TRUE)
[[1]]
[1] 1 12
attr(,"match.length")
[1] 4 1
attr(,"useBytes")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
请注意perl=TRUE设置.有关详细信息,请参阅?regex.
从输出来看,你的正则表达式并没有捕获id1.
由于这是固定格式,为什么不使用substr?year1被提取使用substr(s,1,4),id1使用提取substr(s,9,9)和id2作为as.numeric(substr(s,10,13)).在最后一种情况下,我曾经as.numeric摆脱了零.
| 归档时间: |
|
| 查看次数: |
6385 次 |
| 最近记录: |