1

我有多个这样的字符串(所谓的 DOI):

doi1 <- "10.1057/bp.2009.9"
doi2 <- "10.1057/bp.2015.4"
doi3 <- "10.1057/bp.2008.12"

如何最好地提取字符串的共同开头?

正确的输出应该是10.1057/bp.20.

(我的第一个猜测是使用identical(),但该函数只能比较两个完整的字符串)

4

1 回答 1

0

包 '<a href="https://www.bioconductor.org/packages/release/bioc/html/Biobase.html" rel="nofollow noreferrer">Biobase' 将其实现为lcPrefix.

但是自己实现这一点并不难。这是另一个快速而肮脏的版本(小心,这仅在少数情况下进行了测试):

find_longest_prefix = function (strings) {
    stopifnot(is.character(strings) && length(strings) > 0L)

    for (len in seq_len(nchar(strings[1L]))) {
        prefixes = substr(strings, 1L, len)
        if (! Reduce(\(prev, p) prev && p == prefixes[1L], prefixes[-1L], TRUE)) {
            len = len - 1L
            break
        }
    }
    substr(strings[1L], 1L, len)
}
于 2022-01-12T14:04:40.393 回答