[英]Is it possible to use R's base::strsplit() without consuming pattern
我有一个字符串,它完全由 [:digit:]+[AZ] 的简单重复模式组成,例如 12A432B4B。
我想使用 base::strsplit() 来获取:
[1] "12A" "432B" "4B"
我想我可以使用 lookahead 按 LETTER 拆分并使用unlist(strsplit("12A432B4B", "(?<=.)(?=[AZ])", perl = TRUE))
保持这种模式,但可以看出我错误地得到了分裂:
[1] "12" "A432" "B4" "B"
无法理解适用于此 strsplit 策略的模式? 解释将不胜感激。
奖励:我也未能在gsub
中使用反向引用(例如 - 模式不起作用 `gsub("([[:digit:]]+[AZ])+", "\\1", "12A432B4B"),并且可以你检索超过 \\1 到 \\9 组,如果 [:digit:]+[AZ] 重复超过 9 次?
我们可以使用正则表达式环视在大写字母和数字之间进行拆分
strsplit(str1, "(?<=[A-Z])(?=[0-9])", perl = TRUE)[[1]]
#[1] "12A" "432B" "4B"
str1 <- "12A432B4B"
帖子中提到的模式可以在str_extract_all
中使用:
str_extract_all(string, '[[:digit:]]+[A-Z]')[[1]]
#[1] "12A" "432B" "4B"
或者在基数 R 中:
regmatches(string, gregexpr('[[:digit:]]+[A-Z]', string))[[1]]
其中string
是:
string <- '12A432B4B'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.