Re: [问题] 使用正则来分割字串

楼主: celestialgod (天)   2016-01-09 15:49:09
※ 引述《corel (可罗)》之铭言:
: 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
: 大家好,小弟是R新手
: 假设我有二个字串的格式如下
: [1] "03Jan-05Jan201602Jul-04Jul2016"
: [2] "06Jan-09Jan2016January 2017"
: 我想要把它分离成
: "03Jan-05Jan2016"
: "02Jul-04Jul2016"
: 与
: "06Jan-09Jan2016"
: "January 2017"
: [1][2]只是举例,其实想要处理字串的长度不一
: 小弟有想到用正则表示式来处理, 以下是我的写法
: # 针对06Jan-09Jan2016格式设计的正则表示式方法
: s <- "03Jan-05Jan201602Jul-04Jul2016"
: x <- gsub("(((0[1-9]|[12][0-9]|3[01]{2})[a-zA-Z]{3})-
: ((0[1-9]|[12][0-9]|3[01]{2})[a-zA-Z]{3})[0-9]{4})",";",s)
: x
: # 只不过断出来的字串是
: # OUT PUT ";;"
: 其实我想要断出来的字串是
: Result 1:
: "03Jan-05Jan2016;02Jul-04Jul2016"
: 或
: Result 2:
: "03Jan-05Jan2016"
: "02Jul-04Jul2016"
: 在此,想请问大家, 在R之中是否有其它函数配合 正则表示式用来断出
: Result 1或是 Result 2的结果?
: 谢谢大家
x = c("03Jan-05Jan201602Jul-04Jul2016", "06Jan-09Jan2016January 2017")
pattern1 = "(\\d{2}[a-zA-Z]{3}-\\d{2}[a-zA-Z]{3}\\d{4})"
pattern2 = "([a-zA-Z]*\\s\\d{4})"
regexpRes = regexec(paste0(pattern1, pattern1, '?', pattern2, '?'), x)
lapply(regmatches(x, regexpRes), function(x){
x[nchar(x) > 0 & c(FALSE, rep(TRUE, length(x)-1))]
})
#
# [[1]]
# [1] "03Jan-05Jan2016" "02Jul-04Jul2016"
#
# [[2]]
# [1] "06Jan-09Jan2016" "January 2017"
后面新问题:
字串它可能会有
[1]"03Jan-05Jan201602Jul-04Jul201602Dec-04Dec2016" #三笔同格式
[2]"06Jan-09Jan2016January 2017" #二笔不同格式
[3]"May 201607Jan-08Jan2016" #二笔不同格式
[4]"07Jan-10Jan2016MAY 201706Jan-09Jan2018" #二笔不同格式
等多种组合...
要如何改写让程式可以自动判断
http://pastebin.com/GRWaVSz1
作者: corel (可罗)   2016-01-10 19:35:00
感谢,请问有R的书推荐吗?谢谢推荐

Links booklink

Contact Us: admin [ a t ] ucptt.com