【发布时间】:2020-01-21 19:20:57
【问题描述】:
我正在清理 R 中的一些字符串,我需要将它们拆分以从两个不属于彼此的子字符串中恢复信息。问题是,我没有真正的模式来分割所有的字符串。相反,我知道我正在寻找的不同子字符串是什么,并且我希望将它们用作执行拆分的模式,而不会在此过程中丢失此模式本身。
假设一个字符串样本的形式为:
test <- c("Some string that explains x. Conflict",
"Some string that explains y. Additional information. Precaution",
"Some string that explains z. Justification. Conflict")
我希望将这些字符串拆分为以下列表:
[1] "Some string that explains x."
[2] "Conflict"
[3] "Some string that explains y. Additional information."
[4] "Precaution"
[5] "Some string that explains z. Justification."
[6] "Conflict"
我的问题的核心是我需要保存订单。
显然,我提到的模式是:
pattern <- c("Conflict", "Precaution")
我最初的大多数字符串在解释部分和所谓的模式之间都有一个双空格,所以我可以简单地使用
unlist(strsplit(test, "\\s{2,}"))
区分它们。我现在意识到其中一些在它们之间只有一个空格,并且这种方法不再起作用,因为解释性字符串最终会被划分为每个单独的单词。
提取它们是我查找的一个选项,但是当我尝试时,我会丢失我必须保留的顺序(我最终创建了一个仅包含提取的子字符串的新列表)。
对于strsplit(),我不能将上述模式用于函数,因为通过用它拆分字符串,我删除了模式本身。我尝试使用我发现的 gsub() 技巧用“~”包围模式,然后相应地拆分它,但我发现自己没有成功。
即,
> unlist(strsplit(test, pattern))
[1] "Some string that explains x. "
[2] "Some string that explains y. Additional information. "
[3] "Some string that explains z. Justification. "
本质上,我如何使用上述模式拆分字符串并获得所需的结果?或者,有没有办法从原始字符串中提取模式并以正确的顺序将它们插入到列表中?
【问题讨论】:
-
只有“冲突”和“预防”这两个词是您想要寻找的吗?字符串末尾是否还会出现您特别不想查找的其他内容?
-
@HaydenY。我通过你的问题意识到我应该更准确。我还有更多单词要查找(大约 10 个)。实际上,我正在排序的数据有超过 20 000 个字符串,老实说,我不知道字符串末尾是否会出现我不想要的东西。这实际上是引发问题的原因,因为我确切地知道模式并且我知道我希望检索它。
标签: r regex string split strsplit