正则表达式 – 从Matlab到R:使用正则表达式将命名字??段捕获到
发布时间:2020-12-14 05:57:14 所属栏目:百科 来源:网络整理
导读:我想通过使用正则表达式从字符串列表中捕获名称字段.在Matlab中我这样做了: strings = {'sn555 ID_O20-5-684_N52_2_Subt2_01.',... 'sn555 ID_O20-5-984_S52_8_Subt10_11.'};pattern = ['sn(?serial_number.*) ID(_)(?ID.*)_(?Class[NS])'... '(?Sector.*)_
我想通过使用正则表达式从字符串列表中捕获名称字段.在Matlab中我这样做了:
strings = {'sn555 ID_O20-5-684_N52_2_Subt2_01.',... 'sn555 ID_O20-5-984_S52_8_Subt10_11.'}; pattern = ['sn(?<serial_number>.*) ID(_)(?<ID>.*)_(?<Class>[NS])'... '(?<Sector>.*)_(?<Point>(.*))_[Ss]ubt.*.']; ParsedData = regexp(strings,pattern,'names'); 结果(转换为数据集)是: ParsedData = serial_number ID Class Sector Point '555' 'O20-5-684' 'N' '52' '2' '555' 'O20-5-984' 'S' '52' '8' 现在我想在R中解析这些字符串并将结果转换为数据帧. strings <- c("sn555 ID_O20-5-684_N52_2_Subt2_01.","sn555 ID_O20-5-984_S52_8_Subt10_11.") pattern <- paste0('sn(?<serial_number>.*) ID(_)(?<ID>.*)_(?<Class>[NS])','(?<Sector>.*)_(?<Point>(.*))_[Ss]ubt.*.'); ParsedData <- gregexpr(pattern,strings,perl = TRUE); ParsedData 不幸的是,我是R中的正则表达式的新手,输出(ParsedData)对我来说很困惑.您对如何将字符串转换为数据集有何建议? 解决方法
在过去,我编写了一个辅助函数来从名为
regcapturedmatches.R的正则表达式中提取捕获组.
您可以将它与您的数据一起使用,如下所示: rr <- regcapturedmatches(strings,ParsedData) rr # [[1]] # serial_number X ID Class Sector Point X.1 # [1,] "555" "_" "O20-5-684" "N" "52" "2" "2" # # [[2]] # serial_number X ID Class Sector Point X.1 # [1,] "555" "_" "O20-5-984" "S" "52" "8" "8" 您将获得一个包含列名称的数组的列表.您可以将其转换为data.frame: do.call(rbind.data.frame,rr) # serial_number X ID Class Sector Point X.1 # 1 555 _ O20-5-684 N 52 2 2 # 2 555 _ O20-5-984 S 52 8 8 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |