簡體   English   中英

有人可以准確地解釋這些gsub參數嗎?

[英]Could someone please explain these gsub arguments precisely?

我有這個代碼用於在找到下划線“_”之后對字符串進行trucating,但是我不理解通過gsub傳遞的運算符/參數以使這種操作成為可能。 特別是,為什么我應該gsub“\\\\ 1”而不是“”。 我注意到gsubbing的輸出沒有刪除整個字符串。 我對運營商的使用方式也有點困惑,特別是parantheses和括號:

AAA <- "ATGAS_1121"
(aa <- gsub("([^_]*).*", "\\1", AAA))
## [1] "ATGAS"

請注意,這篇文章大量借鑒: R刪除部分字符串

謝謝,我很感激。

在regex (..)稱為捕獲組,它捕獲與該組內存在的模式匹配的所有字符。 您可以通過反向引用組索引號來引用這些字符。

gsub("([^_]*).*", "\\1", AAA)

([^_]*)捕獲開頭但不是_零次或多次的所有字符。 以下.*匹配所有剩余的字符。 gsub將用替換部分中的字符替換所有匹配的字符。 如果您的代碼是,

gsub("([^_]*).*", "", AAA)

它將刪除所有字符,因為我們匹配所有字符但只捕獲了開頭存在的那些字符( 不是_符號 )。 因此,通過將匹配的字符替換為組索引1中存在的字符,將為您提供_符號之前的部分。

使用\\K可以獲得相同的結果

> gsub("[^_]*\\K.*", "", AAA, perl = TRUE)
[1] "ATGAS"

由於\\K是PCRE功能,因此您必須啟用perl=TRUE參數。 \\K保持文本匹配到目前為止整個正則表達式匹配。

為什么我應該使用gsub \\\\1而不是""

反向引用告訴引擎匹配捕獲組捕獲的字符。 可以通過將要分組的字符放在一組括號( ... )內來創建捕獲組。 從左到右的每組捕獲括號都會被賦予一個數字,無論引擎在評估匹配時是否使用這些括號。

在這種情況下,您需要使用替換調用內部的反向引用\\1將分組1匹配的字符分配給新字符串aa 通過使用""不是,你要指定aa空值,因為正則表達式模式匹配整個字符串。

我對運營商的使用方式也有點困惑......括號

方括號[ ... ]你問被稱為字符類定義了一組字符。 說 - “匹配類指定的一個字符”。

我怎么建議這樣做:

在此示例中,根本不需要正則表達式,您可以簡單地拆分字符串。

AAA <- 'ATGAS_1121'
strsplit(AAA, '_', fixed=T)[[1]][1]
# [1] "ATGAS"

如果你堅持使用正則表達式,你可以使用sub代替如下:

AAA <- 'ATGAS_1121'
sub('_.*', '', AAA)
# [1] "ATGAS"

暫無
暫無

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

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