2017-07-17 72 views
4

我在R中的以下字符串:[R正則表達式:刪除只顧眼前以下字符後>

string1 = "A((..A>B)A" 

我想>後立即刪除所有punctation,和信,即>B

下面是輸出我的願望:

output = "AAA" 

我嘗試使用gsub()如下:

output = gsub("[[:punct:]]","", string1) 

但是,這給了AABA,它保留緊接着的字符。

回答

1

你說

刪除所有punctation,和字母之後立即>

標點與[[:punct:]]匹配和信可以用[[:alpha:]]相匹配,因此,您可以使用TRE正則表達式與gsub

string1 = "A((..A>B)A" 
gsub(">[[:alpha:]]|[[:punct:]]", "", string1) 
# => [1] "AAA" 

online R demo

注意>是還有一個與[[:punct:]]匹配的字符,因此,這裏不需要任何替代方法,只需在它後面用一個字母將其刪除即可。

圖案的詳細資料

  • >[[:alpha:]] - 一個>任何字母
  • | - 或
  • [[:punct:]] - 標點或符號。
7

這將工作使用你的工作加上領先lookbehind首先尋找什麼後>字符。

gsub('(?<=>).|[[:punct:]]', '', "A((..A>B)A", perl=TRUE) 
## [1] "AAA" 
2

一個不使用Perl的略微不太複雜的正則表達式,似乎在這個例子中工作,以及:

gsub("[[:punct:]]|>(.)", "", "A((..A>B)A") 
[1] "AAA"