R语言筛选字符串指定位置含01-12数值的data.table子集
解决方案
方法1:提取子串后判断数值范围
直接提取目标位置的字符转为整数,用data.table自带的%between%运算符判断区间,逻辑清晰易读:
library(data.table) # 构造测试数据 x <- data.table(V1 = c('ACCN-NJ-A55O-01A-11D-A25L-08','ACCN-NJ-A55O-11D-11D-A25L-08', 'ACCN-05-4249-01A-01D-1105-08', 'ACCN-S2-AA1A-15C-12D-A397-08')) # 筛选逻辑:提取第14-15位字符转整数后判断是否在1-12区间 result <- x[as.integer(substr(V1, 14, 15)) %between% c(1, 12)]
方法2:用grepl正则匹配
如果偏好正则写法,可以直接匹配指定位置的数字范围:
result <- x[grepl('^.{13}(0[1-9]|1[0-2])', V1)]
正则说明
^匹配字符串开头.{13}匹配前13个任意字符,刚好定位到第14位起始位置(0[1-9]|1[0-2])匹配01到09、10到12的有效两位数
输出结果
两种方法得到的结果一致,符合预期:
V1 1: ACCN-NJ-A55O-01A-11D-A25L-08 2: ACCN-NJ-A55O-11D-11D-A25L-08 3: ACCN-05-4249-01A-01D-1105-08
内容的提问来源于stack exchange,提问作者SUMIT
相关产品推荐
相关产品推荐

