gpt4 book ai didi

r - 字符串分割的模式如何成为子字符串本身?

转载 作者:行者123 更新时间:2023-12-02 13:47:57 24 4
gpt4 key购买 nike

我正在清理 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. "

本质上,我如何使用上述模式分割字符串并获得所需的结果?或者,有没有办法从原始字符串中提取模式并将它们以正确的顺序插入到列表中?

最佳答案

如果您通过用 '|' 分隔这两个模式来将它们组合成一个元素 patt,则该新模式将与 中的两个原始模式之一匹配>测试向量。然后使用 str_remove 可以获取没有模式的部分,使用 str_extract 可以获取与模式之一匹配的部分。现在,您可以使用模式 c(rbind(x, y))* 将这两个向量交错为一个向量。这比直接使用正则表达式获取我假设的非模式和模式部分的计算效率要低。

注意:所有这些都假设您要提取的模式只是“冲突”或“预防措施”,并且它们可以显示在字符串中的任何位置。这与其他一些答案中的逻辑不同,其他答案不识别这两个单词,而是识别字符串的最后一部分。我不太清楚你想要哪个,所以仅供引用。

library(stringr)
patt <- paste(pattern, collapse = '|')
c(rbind(str_remove(test, patt), str_extract(test, patt)))

# [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"

* 请参阅下面的示例。这是可行的,因为 c 会将矩阵按列转换为向量,并且您通过将向量 rbind 在一起来创建矩阵,其中每列每个向量都有一个元素。

c(rbind(c('a', 'b', 'c'), c('A', 'B', 'C')))
#[1] "a" "A" "b" "B" "c" "C"

关于r - 字符串分割的模式如何成为子字符串本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com