首页 > 解决方案 > 正则表达式忽略中间字符串

问题描述

我有数据框 dat1。有什么方法可以使用 str_extract() 和正则表达式从 colnames(dat1) 中仅提取“red white 40 R”?我计划稍后使用 facet_wrap 绘制它们,但无法提取我想要的文本。对于我的实际代码,R# 将始终在字符串中,但是,留给 R# 的所有内容都可以改变。str_extract() 之后的预期输出应该是 txt。

dat1 <- data.frame(c(1,2,3,4), c(10, 20, 30, 40),
                   c(100, 200, 300, 400), c(1000, 2000, 3000, 4000))
colnames(dat1) <- c("red G white 40 R3", "red G white 40 R5", 
                    "red H white 40 R7", "red H white 40 R10")
txt <- c("red white 40 R", "red white 40 R", "red white 40 R", "red white 40 R")

标签: rregex

解决方案


这实际上取决于您的边缘情况。例如,您可以使用sub("(red ).* (white 40 R).*", "\\1\\2", colnames(dat1)),但您也可以colnames(dat1) <- rep("red white 40 R", ncol(dat1))在那时写。

你想保留的话会改变吗?号码?也许你想要更强大的东西:

sub("(\\w+).*?(\\w+ \\d+ \\d).*", "\\1\\2", colnames(dat1))

如果我们不知道您所需代码的完整用例,就很难提供帮助。


推荐阅读