簡體   English   中英

是否可以在不消耗模式的情況下使用 R 的 base::strsplit()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM