r - 从 R 中的字符向量中从/到特定单词中提取字符串
问题描述
这是我拥有的字符向量的示例,我需要提取“## Code:”和“## My table”之间的所有字符串。我知道我可以使用 来按位置执行此操作text[4:8]
,但是要提取的代码长度会有所不同,因此我需要一个不依赖于固定位置的解决方案。
text <- c("## Author: user", "## Data = data.txt", "## Code:", "temp(){", "x = a1 + b1", "a1(b1 = 3)", "tf(cov = c(,1,))", "}", "## My table")
新的字符向量应包含以下内容:
c("temp(){", "x = a1 + b1", "a1(b1 = 3)", "tf(cov = c(,1,))", "}")
感谢您帮助我找到解决方案。
解决方案
我们可以用 创建一个逻辑索引==
,然后用which
text[which(cumsum(text == "## Code:"|text == "## My table") == 1)[-1]]
#[1] "temp(){" "x = a1 + b1" "a1(b1 = 3)" "tf(cov = c(,1,))" "}"
或者which
找到开始和结束位置并使用:
来获取提取元素的位置序列
text[(which(text == "## Code:")[1] +1):(which(text == "## My table")-1)]
推荐阅读
- c# - 关联失败
- c# - 使用asp.net mv在ado.net中选择带有where子句的查询
- facebook - 如何让 Unity FB.AppRequest 到达他们的接收者?
- java - 运行Kafka生产者时没有错误或输出记录
- r - 创建列表时对数据集进行排序并保持顺序
- javascript - Flask Stripe 集成 - JSON 对象必须是 str 而不是字节
- azure - Azure 的 QueueClient.ReceiveMessagesAsync 在没有消息时返回
- mvvm - SwiftUI 使用高频数据更新 UI
- ros - 点云不更新
- jenkins-pipeline - 如何使用 SSO 身份验证部署到 Anypoint Runtime Manager?