gpt4 book ai didi

R 正则表达式捕获组?

转载 作者:行者123 更新时间:2023-12-04 11:53:05 24 4
gpt4 key购买 nike

我有很多这样的字符串:

2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0

我想提取紧接在最后一个 "/" 之后并以 "_" 结尾的子字符串:

556662

我已经找到了如何提取:/01/01/07/556662

通过使用以下正则表达式:(\/)(.*?)(?=\_)

请告知我如何捕获正确的组。

最佳答案

你可以使用

x <- "2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0"
regmatches(x, regexpr(".*/\\K[^_]+", x, perl=TRUE))
## [1] "556662"

参见 regexR demo .

这里,正则表达式匹配并输出第一个匹配的子串

  • .*/ - 任何 0+ 个字符,直到最后一个 /
  • \K - 从匹配中省略这部分
  • [^_]+ - 将 _ 以外的 1 个或多个字符放入匹配值中。

或者,sub 解决方案:

sub(".*/([^_]+).*", "\\1", x)

参见 regex demo .

这里和上一个类似,但是_以外的1个或多个字符被捕获到第1组(\1 在替换模式中)和尾随的 .* 确保整个输入匹配(并消耗,准备被替换)。

替代的非基础 R 解决方案

如果您负担得起或更喜欢使用 stringi,您可以使用

library(stringi)
stri_match_last_regex("2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0", ".*/([^_]+)")[,2]
## [1] "556662"

这将匹配到最后一个 / 的字符串,并将捕获到第 1 组(您使用 [,2] 在第 2 列中访问)1 个或多个字符除了_

或者

stri_extract_last_regex("2019/01/01/07/556662_cba3a4fc-cb8f-4150-859f-5f21a38373d0", "(?<=/)[^_/]+")
## => [1] "556662"

这将在 / 之后提取除 _/ 之外的 1 个或多个字符组成的字符串的最后一个匹配项。

关于R 正则表达式捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54926083/

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