gpt4 book ai didi

R str_extract 省略号前后的所有内容

转载 作者:行者123 更新时间:2023-12-05 03:36:18 25 4
gpt4 key购买 nike

我正在尝试找到一种方法,将中间带有省略号的字符列拆分为两列,省略号之前的所有内容和之后的所有内容。

例如,如果我有:

a <- "60.4 (b)(33) and (e)(1) revised....................................46111"

我如何将其拆分为“60.4 (b)(33) 和 (e)(1) 修订版”和“46111”?

我试过:

str_extract(a, ".*\\.{2,}")

对于第一部分,对于第二部分:

str_extract(a, "\\.{2,}.*")

但这两者都保留了省略号,我想删除它。

最佳答案

您似乎想要拆分,而不是提取,具有匹配两个或多个连续点的模式:

a <- "60.4 (b)(33) and (e)(1) revised....................................46111"
unlist(stringr::str_split(a, "\\.{2,}"))
## => [1] "60.4 (b)(33) and (e)(1) revised" "46111"

## Base R strsplit:
unlist(strsplit(a, "\\.{2,}"))
## => [1] "60.4 (b)(33) and (e)(1) revised" "46111"

这里还有另一种可能的拆分正则表达式:您可以匹配字符串末尾跟随着某个或多个数字的任何一个或多个点:

unlist(stringr::str_split(a, "\\.+(?=\\d+$)"))
unlist(strsplit(a, "\\.+(?=\\d+$)", perl=TRUE))

两者都产生相同的 [1] "60.4 (b)(33) and (e)(1) revised""46111" 输出。此处,\.+ 匹配一个或多个点,而 (?=\d+$) 是一个正向先行,匹配紧跟一个或多个数字的位置( \d+) 然后是字符串结尾 ($)。

另一种方法是使用 str_match 进行匹配(以捕获您需要的位):

res <- stringr::str_match(a, "^(.*?)\\.+(\\d+)$")
res[,-1]
# => [1] "60.4 (b)(33) and (e)(1) revised" "46111"

这里,

  • ^ - 匹配字符串的开头
  • (.*?) - 第 1 组:除换行符以外的任何零个或多个字符,尽可能少
  • \.+ - 一个或多个点
  • (\d+) - 第 2 组:一个或多个数字
  • $ - 字符串结尾。

res[,-1] 是删除具有完整匹配项的第一列所必需的。

关于R str_extract 省略号前后的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69668576/

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