我正在與 ; 分隔的字串,如
a="My name is Laura;My name is Martin;My name is Carl;"
我想洗掉名稱后的部分,結果如下:
a="My name;My name;My name;"
uj5u.com熱心網友回復:
使用gsub:
gsub("(?<=name)[^;]*", "", a, perl = TRUE)
# [1] "My name;My name;My name;"
或者,我們可以為此使用gregexpr和`regmatches<-`:
gre <- gregexpr("(?<=name)[^;]*", a, perl = TRUE)
regmatches(a, gre)
# [[1]]
# [1] " is Laura" " is Martin" " is Carl"
regmatches(a, gre) <- ""
a
# [1] "My name;My name;My name;"
演練:
(?<=name)是后視正則運算式,它不“消耗”name字串,只是將其用作起點;這是一個 Perl 擴展,ergoperl=TRUE;(?<=name)[^;]*之后查找所有非;文本nameregmatches(a, gre)回傳值;除了驗證將被洗掉的文本之外,我們不需要運行這行代碼;`regmatches<-`是regmatches賦值運算子的 LHS 的一種形式(并非所有函式都有這種形式);我們用它來替換匹配的部分。
uj5u.com熱心網友回復:
解決方案:
隨著gsub和perl=TRUE:
> gsub("(?<=name).*", "", unlist(strsplit(a, ";")), perl=TRUE)
[1] "My name" "My name" "My name"
>
解釋:
這會name在.*后視中檢測并洗掉它之后的所有內容 ( )。首先它strsplit用來將它拆分成一個串列 by ;,然后我unlist用來使它成為一個向量。
用:
> paste(gsub("(?<=name).*", "", unlist(strsplit(a, ";")), perl=TRUE), collapse=";")
[1] "My name;My name;My name"
>
uj5u.com熱心網友回復:
它是這樣作業的
gsub("My name[^;]*","My name",a)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324558.html
標籤:r
上一篇:結合管道dplyr命令
下一篇:計算周時差
