簡體   English   中英

替換 r 中的字符串模式

[英]replace a string pattern in r

我知道有很多關於正則表達式的問題,我的問題會在某個地方得到回答。 但我找不到正確的答案。

我只是想刪除一個簡單的字符串模式。 如果在單詞“AA”之后和“,”之前有任何數值或帶有符號的數值,我想刪除它們。 例如,

tmp1= "B1, AA1~11, B22"
tmp2 = "AA2, 13, C1"
tmp3 = "1, 2, 3, AA-3"

我想要的 output 是

tmp1= "B1, B22"
tmp2 = "13, C1"
tmp3 = "1, 2"

這是我嘗試過的

str_replace_all(tmp1,"(AA)(\\d+)((?=,)",replacement= "")

您的示例非常令人困惑,但是這樣的事情應該可以工作:

tmp1= "B1, AA1~11, B22"
tmp2 = "AA2, 13, C1"
tmp3 = "1, 2, 3, AA-3"

f = function(x){
    gsub('AA[^A-Za-z ]*?', '', x, perl=T)
}

> f(tmp1)
[1] "B1,  B22"
> f(tmp2)
[1] " 13, C1"
> f(tmp3)
[1] "1, 2, 3, AA-3"

如果要刪除 tmp2 中的尾隨空格和 tmp3 中的尾隨 AA-3,則可能:

f = function(x){
    gsub('AA[^A-Za-z ]*[,$]* ?', '', x)
}

> f(tmp1)
[1] "B1, B22"
> f(tmp2)
[1] "13, C1"
> f(tmp3)
[1] "1, 2, 3, "

但是為了獲得更好的反饋,你真的應該投入更多的時間來制作更好的例子。

假設要消除任何包含 AA 的非空格字符序列,請使用scan拆分字段,使用grep刪除具有AA的字段,然后使用toString將其重新組合在一起。

stripAA <- function(x) {
  if (length(x) > 1) return(sapply(x, stripAA, USE.NAMES = FALSE))
  x2 <- scan(text = x, what = "", quiet = TRUE, sep = ",", strip.white = TRUE)
  x3 <- grep("AA", x2, value = TRUE, invert = TRUE)
  toString(x3)
}

stripAA(tmp1)
## [1] "B1, B22"
stripAA(tmp2)
## [1] "13, C1"
stripAA(tmp3)
## [1] "1, 2, 3"

stripAA(c(tmp1, tmp2, tmp3))   # all at once
## [1] "B1, B22" "13, C1"  "1, 2, 3"

我不知道為什么 3 從 tmp3 中的tmp3中刪除,但這里嘗試使用subtrimws

trimws(sub('AA.*?(,|$)', '', c(tmp1, tmp2, tmp3)), whitespace = '[,|\\s]')
#[1] "B1,  B22" "13, C1"   "1, 2, 3" 

使用sub我們刪除以'AA'開頭的字符,直到字符串的逗號或結尾。 使用trimws刪除剩余的逗號和空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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