【问题标题】:How do I extract specific parts of text from a string in R?如何从 R 中的字符串中提取文本的特定部分?
【发布时间】:2020-05-22 09:15:22
【问题描述】:

在 R 中,我有一个变量,其中包含每行的大字符串。从这些字符串中,我想提取特定部分,并将它们添加到我的数据框中的单独变量中。例如,一个字符串值如下所示:

"identification"":""138""city"":""New-York"":COMMENT""text"":""Very good!""COMMENT""text"":""It was delicious""guests"":""2""

想要的结果:

    city      comment_text_1  comment_text_2
1   New-York  Very good!      It was delicious!   

每个字符串的长度不同,并且整个字符串都使用标点符号。此外,字符串之间存在一些细微差别,例如,city"":""COMMENT""text"":"" 之间可能还有一段文本

可能是一个开始,我需要的文本始终是 city"":"" 之后的文本,第一个 COMMENT""text"":"" 和第二个 COMMENT""text"":""。此外,我需要的文本总是以两个引号结尾""

【问题讨论】:

  • 查看正则表达式教程。这很痛苦——祝你好运!

标签: r variables extract


【解决方案1】:

正如@Mark Neal 提到的,这是一项您可以通过使用正则表达式来解决的任务。我不太擅长使用正则表达式,但也许我可以给你一些见解:

library(tidyverse)
text <- c('"identification"":""138""city"":""New-York"":COMMENT""text"":""Very good!""COMMENT""text"":""It was delicious""guests"":""2""')

city <- text %>% str_extract('(?<=city"":"").*(?="":COMMENT"")')
comment_1 <- text %>% str_extract('(?<=COMMENT""text"":"").*(?=""COMMENT"")')
comment_2 <- text %>% str_extract('(?<=COMMENT""text"":"").*(?=""guests"")') %>% str_extract('(?<=COMMENT""text"":"").*')

df <- data.frame(city=city, comment_1=comment_1, comment_2=comment_2)

我做了什么?

城市

str_extract('(?<=city"":"").*(?="":COMMENT"")')

我搜索 city"":"""":COMMENT"" 并返回其间的所有内容:

[1] "New-York"

评论 1

comment_1 <- text %>% str_extract('(?<=COMMENT""text"":"").*(?=""COMMENT"")')

COMMENT""text"":""""COMMENT"" 相同

[1] "Very good!"

评论 2

由于我无法弄清楚如何使用一个正则表达式获得所需的结果,所以我不得不迭代。

comment_2 <- text %>% str_extract('(?<=COMMENT""text"":"").*(?=""guests"")') %>% str_extract('(?<=COMMENT""text"":"").*')

第一次迭代 COMMENT""text"":""""guests"" 返回

[1] "Very good!\"\"COMMENT\"\"text\"\":\"\"It was delicious"

因为正则表达式是贪婪的,即它返回匹配模式的最大可能字符串。 因此,COMMENT""text"":"" 的下一次迭代仅返回所需的最后一条评论:

[1] "It was delicious"

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多