gpt4 book ai didi

regex - 根据子字符串出现在字符串中的位置识别字符串

转载 作者:行者123 更新时间:2023-12-04 17:46:48 24 4
gpt4 key购买 nike

想象一下我有一组字符串,比如:

#1: "A-B-B-C-C"
#2: "A-A-A-A-A-A-A"
#3: "B-B-B-C-A-A"

现在我想检查某些模式是否出现在序列的第一个、中间或最后三分之一。因此,我希望能够制定这样的规则:
Match the string if, and only if, 
marker X occurs in the first/middle/last third of the string

例如,我可能想要匹配具有 A 的字符串。在前三分之一。考虑到上面的序列,我会匹配 #1#2 .我还可以匹配具有 A 的字符串在最后三分之一。这将匹配 #2#3 .

我如何编写一个通用代码/正则表达式模式,可以将这种类型的各种规则作为输入,然后匹配适当的子序列?

最佳答案

这是一个完全矢量化的尝试(您可以尝试设置并告诉我是否要添加/更改某些内容)

StriDetect <- function(x, seg = 1L, pat = "A", frac = 3L, fixed = TRUE, values = FALSE){
xsub <- gsub("-", "", x, fixed = TRUE)
sizes <- nchar(xsub) / frac
subs <- substr(xsub, sizes * (seg - 1L) + 1L, sizes * seg)
if(isTRUE(values)) x[grep(pat, subs, fixed = fixed)] else grep(pat, subs, fixed = fixed)
}

测试您的载体
x <- c("A-B-B-C-C", "A-A-A-A-A-A-A", "B-B-B-C-A-A")
StriDetect(x, 1L, "A")
## [1] 1 2
StriDetect(x, 3L, "A")
## [1] 2 3

或者,如果您想要实际匹配的字符串
StriDetect(x, 1L, "A", values = TRUE)
## [1] "A-B-B-C-C" "A-A-A-A-A-A-A"
StriDetect(x, 3L, "A", values = TRUE)
## [1] "A-A-A-A-A-A-A" "B-B-B-C-A-A"

请注意,当字符串大小没有被 3 整除时(例如, nchar(x) == 10 ),默认情况下最后三分之一是最大的组(例如,如果 nchar(x) == 10 ,则大小为 4)

关于regex - 根据子字符串出现在字符串中的位置识别字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31450593/

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