gpt4 book ai didi

正则表达式从字符的开始到 n 次出现

转载 作者:行者123 更新时间:2023-12-04 10:53:20 25 4
gpt4 key购买 nike

我真的把时间花在学习正则表达式上,而且我正在玩不同的玩具场景。我无法开始工作的一种设置是 从字符串的开头抓取到第 n 次出现的字符 其中 n > 1。

在这里,我可以从字符串的开头抓取到第一个下划线,但我不能将其推广到第二个或第三个下划线。

x <- c("a_b_c_d", "1_2_3_4", "<_?_._:")

gsub("_.*$", "", x)

Here's what I'm trying to achieve with regex. (`sub`/`gsub`):

## > sapply(lapply(strsplit(x, "_"), "[", 1:2), paste, collapse="_")
## [1] "a_b" "1_2" "<_?"

#or

## > sapply(lapply(strsplit(x, "_"), "[", 1:3), paste, collapse="_")
## [1] "a_b_c" "1_2_3" "<_?_."

相关帖子: regex from first character to the end of the string

最佳答案

这是一个开始。为了使其安全用于一般用途,您需要它来正确转义正则表达式的特殊字符:

x <- c("a_b_c_d", "1_2_3_4", "<_?_._:", "", "abcd", "____abcd")

matchToNth <- function(char, n) {
others <- paste0("[^", char, "]*") ## matches "[^_]*" if char is "_"
mainPat <- paste0(c(rep(c(others, char), n-1), others), collapse="")
paste0("(^", mainPat, ")", "(.*$)")
}

gsub(matchToNth("_", 2), "\\1", x)
# [1] "a_b" "1_2" "<_?" "" "abcd" "_"

gsub(matchToNth("_", 3), "\\1", x)
# [1] "a_b_c" "1_2_3" "<_?_." "" "abcd" "__"

关于正则表达式从字符的开始到 n 次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15909626/

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