作者celestialgod (天)
看板R_Language
标题Re: [问题] 使用正则来分割字串
时间Sat Jan 9 15:49:09 2016
※ 引述《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
--
R资料整理套件系列文:
magrittr #1LhSWhpH (R_Language) http://tinyurl.com/1LhSWhpH
data.table #1LhW7Tvj (R_Language) http://tinyurl.com/1LhW7Tvj
dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/1LhpJCfB
dplyr(下) #1Lhw8b-s (R_Language)
tidyr #1Liqls1R (R_Language) http://tinyurl.com/1Liqls1R
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.73.236
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1452325751.A.7A0.html
1F:推 corel: 感谢,请问有R的书推荐吗? 01/10 19:35
请看置底... 另外regular expression 网路上很多教学,我也是看网路上教学而已...
R in a nutshell是我唯一读完的R书...
※ 编辑: celestialgod (180.218.152.118), 01/10/2016 22:00:38
2F:推 corel: 谢谢推荐 01/10 22:41