r - 如何在 R 中提取这些多个正则表达式组
问题描述
我有以下格式的字符串输入:
my.strings <- c("FACT11", "FACT11:FACT20", "FACT1sometext:FACT20", "FACT1text with spaces:FACT20", "FACT14:FACT20", "FACT1textAnd1312:FACT2etc", "FACT12:FACT22:FACT31")
我想提取所有“FACT”和 FACT 后面的第一个数字。所以这个例子的结果是:
c("FACT1", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2", "FACT1 FACT2 FACT3")
或者,结果可以是一个列表,其中列表的每个元素都是一个包含 1 到 3 个项目的向量。
到目前为止我得到的是:
gsub("(FACT[1-3]).*?:(FACT[1-3]).*", '\\1 \\2', my.strings)
# [1] "FACT11" "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 " "FACT1 FACT2 "
# [7] "FACT1 FACT2 " "FACT1 FACT2 "
它看起来不错,除了第一个元素的“FACT11”而不是“FACT1”(删除第二个“1”),并且缺少最后一个元素的“FACT3” my.strings
。但是添加另一个组以gsub
某种方式使整个事情变得混乱。
gsub("(FACT[1-3]).*?:(FACT[1-3]).*?:(FACT[1-3]).*?", '\\1 \\2 \\3', my.strings)
# [1] "FACT11" "FACT11:FACT20" "FACT1sometext:FACT20"
# [4] "FACT1text with spaces:FACT20" "FACT14:FACT20" "FACT1textAnd1312:FACT2etc"
# [7] "FACT12:FACT21" "FACT1 FACT2 FACT31"
那么如何正确提取组?
解决方案
您也可以使用基本 R 方法:
> m <- regmatches(my.strings, gregexpr("FACT[1-3]", my.strings))
> sapply(m, paste, collapse=" ")
[1] "FACT1"
[2] "FACT1 FACT2"
[3] "FACT1 FACT2"
[4] "FACT1 FACT2"
[5] "FACT1 FACT2"
[6] "FACT1 FACT2"
[7] "FACT1 FACT2 FACT3"
提取与您的FACT[1-3]
(or FACT[0-9]
, or FACT\\d
) 模式的所有匹配项,然后用空格“加入”它们。
推荐阅读
- java - 我可以将 HandshakeInterceptor 与 graphql-spring-boot-starter 一起使用来获取 Cookie 吗?
- reactjs - Flow module.name_mapper 不适用于 Create React App 中的别名
- css - 使用打字稿应用 css 网格样式在 IE 中不起作用。Vue JS
- typescript - 我可以将 TypeScript 配置为在 js 输出中自动为私有成员添加下划线前缀吗?
- saml - OpenAM SAML2 瞬态联合和持久联合
- node.js - 如果计数达到 0,Firebase 云功能事务删除节点
- google-sheets - 在单元格中添加信息而不影响其值
- windows - GetVolumeInformation 为 SD 卡返回 0 卷序列号
- javascript - 将图像添加到 node_modules 包页面
- android - Android 选项卡布局 setIcon 方法仅适用于 OnTabSelectedListener