我有多個類似于以下模式的字串:
dat<-("00000000AAAAAAAAAA0AAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAD0")
我需要將所有 0 值更改為“。” 在字串中的第一個字符值之前。在這個例子中我想要的輸出是:
“......AAAAAAAAAAAA0AAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAD0”。
我嘗試使用 gsub 來完成此任務:
gsub("\\G([^_\\d]*)\\d", ".\\1", dat, perl=T)
不幸的是,它把所有的 0 都改成了“。” 而不是第一個“A”之前的 0。
有人可以幫我解決這個問題嗎?
uj5u.com熱心網友回復:
如果您想簡單地0用 a替換每個前導.,您可以使用
gsub("\\G0", ".", dat, perl=TRUE)
在這里,\G0匹配0字串開頭的字符,然后每次匹配成功后。請參閱此正則運算式演示。
如果您需要0在第一個字母之前替換字串中的每個字母,您可以使用
gsub("\\G[^\\p{L}0]*\\K0", ".", dat, perl=TRUE)
在這里,\G匹配字串的開頭或前面成功匹配的結尾,[^\p{L}0]*匹配零個或多個除字母 and 之外的字符0,然后\K省略匹配的文本,然后0匹配0字符并替換為 a .。請參閱此正則運算式演示。
在線查看R 演示:
dat <- c("00000000AAAAAAAAAA0AAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAD0","102030405000AZD")
gsub("\\G0", ".", dat, perl=TRUE)
## [1] "........AAAAAAAAAA0AAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAD0"
## [2] "102030405000AZD"
gsub("\\G[^\\p{L}0]*\\K0", ".", dat, perl=TRUE)
## [1] "........AAAAAAAAAA0AAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAD0"
## [2] "1.2.3.4.5...AZD"
uj5u.com熱心網友回復:
這真的很難。所以我嘗試使用自定義函式來做到這一點:
library(stringr)
dat<-("00000000AAAAAAAAAA0AAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAD0")
Zero_Replacer <- function(x) {
x <- str_split(x, '[A-Za-z]', 2)
x[[1]][1] <- str_replace_all(x[[1]][1], "0", ".")
paste0(x[[1]][1], x[[1]][2])
}
Zero_Replacer(dat)
輸出:
[1] "........AAAAAAAAA0AAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAD0"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388743.html
上一篇:如何根據第一個空格拆分R中的列
下一篇:從生成的字串掃描
