簡體   English   中英

R:刪除字符串中分隔符后的所有字母字符

[英]R: Removing all letter characters after a delimiter in a string

我想在字符串中刪除分隔符后面的所有字母([az])(例如“ - ”),例如:

s <- "abc-10abc"

所以得到:

> s2
[1] "abc-10"

我怎樣才能做到這一點? 謝謝

gsub("(.*\\d).*", "\\1", s)

第一個模式參數使用()來“捕獲”一組字符。 在捕獲內部,我們正在尋找所有外卡字符,直到數字\\\\d 這會“捕獲”所有內容,直到最后一位數字。

由於pattern參數還包括捕獲組之后的多通配符,因此整個原始字符串將作為替換目標。 替換參數\\\\1表示使用模式參數中的第一個(僅在此情況下)捕獲表達式。

讓我知道,如果不清楚,這是我的正則表達福音為R正則表達式的幫助https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

就像Rich Scriven指出的那樣,你可以用.* [az]*代替.* [az]*來定位最后一個數字之后的字母。 您可能希望將參數ignore.case = TRUE添加到gsub()以及不是所有內容都是小寫:

gsub("(.*\\-\\d*)[a-z]*", "\\1", s, ignore.case = TRUE)

我不是正則表達式專家,但我相信這符合你的模式。

gsub("(^.*-[^[:alpha:]]*)[[:alpha:]]*", "\\1", s)
#[1] "abc-10"

說明:

  1. ^ - 字符串的開頭
  2. ^.*字符串開頭的任何字符后跟零次或多次重復。
  3. -匹配問題中的分隔符
  4. [^[:alpha:]]* circunflex否定了類[:alpha:] ,不匹配字母字符
  5. (all of above)形成一個模式組,第一個(也是唯一的)
  6. [[:alpha:]]*匹配一個字母字符,然后重復零次或多次

然后在replacement參數中, \\\\1表示用第一組替換模式,因此省略[[:alpha:]]*部分。

暫無
暫無

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

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