【问题标题】:R how do I retain string between two indetifiersR如何在两个标识符之间保留字符串
【发布时间】:2015-12-15 22:47:42
【问题描述】:

我有一列有很多文字,我只想保留 [start section id="20107"][end section id="20107"] 之间的文字其余不重要。

这里是原始数据

[start section id="20106"]

California, Death Valley 

[end section id="20106"]

[start section id="20107"]

1. Apple
2. Orange
3. Bannana
4. Kiwi
5. Grapes
6. Strawberry

[end section id="20107"]


[start section id="20108"]

Jose has worked on these farms , currently he is in Florida picking tomatos

[end section id="20108"]

我想要做的只是在开始部分 id="20107" 和结束部分 id="20107" 之间保留文本

[start section id="20107"]

1. Apple
2. Orange
3. Bannana
4. Kiwi
5. Grapes
6. Strawberry

[end section id="20107"]

非常感谢有关此主题的任何帮助。

【问题讨论】:

  • 你自己尝试过什么?以下是如何创建reproducible example
  • @Heroka,我试过testdf = filter(org_df, grepl('[start section id="20107"]|[end section id="20107"]', col1)),我没有得到正确的结果,它显示了原始列并且没有去掉这些开始和结束条件之外的文本
  • 请提供一些示例数据并将您尝试过的内容添加到您的答案中。并且 grepl 为整个字符串中的匹配返回一串布尔值。您可能需要 gsub。
  • @Heroka,酷,做到了
  • 您的代码示例不是典型的 R 语法。使用dput(mydata) 发布实际代码而不是解释性文本副本。

标签: r text substring


【解决方案1】:

您可以使用sub

x <- '[start section id="20107"]

1. Apple
2. Orange
3. Bannana
4. Kiwi
5. Grapes
6. Strawberry

[end section id="20107"]


[start section id="20108"]

Jose has worked on these farms , currently he is in Florida picking tomatos

[end section id="20108"]'
cat(sub('[\\s\\S]*(\\[start section id="20107"\\][\\s\\S]*?\\[end section id="20107"\\])[\\s\\S]*', '\\1', x, perl=T))

#[start section id="20107"]

#1. Apple
#2. Orange
#3. Bannana
#4. Kiwi
#5. Grapes
#6. Strawberry

#[end section id="20107"]

【讨论】:

  • 没有过滤起点和终点之间的文本,它只是显示相同的列,和以前一样,没有变化
  • 你运行我的代码了吗?可能是因为我的正则表达式中的空格,请使用 \\s+ 而不是我的正则表达式中的空格。
猜你喜欢
  • 2012-09-01
  • 1970-01-01
  • 2018-04-19
  • 2016-02-19
  • 2019-10-27
  • 2020-05-18
  • 2020-06-02
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多