我在R中的以下字符串:[R正則表達式:刪除只顧眼前以下字符後>
string1 = "A((..A>B)A"
我想>
後立即刪除所有punctation,和信,即>B
下面是輸出我的願望:
output = "AAA"
我嘗試使用gsub()
如下:
output = gsub("[[:punct:]]","", string1)
但是,這給了AABA
,它保留緊接着的字符。
我在R中的以下字符串:[R正則表達式:刪除只顧眼前以下字符後>
string1 = "A((..A>B)A"
我想>
後立即刪除所有punctation,和信,即>B
下面是輸出我的願望:
output = "AAA"
我嘗試使用gsub()
如下:
output = gsub("[[:punct:]]","", string1)
但是,這給了AABA
,它保留緊接着的字符。
你說
刪除所有punctation,和字母之後立即
>
標點與[[:punct:]]
匹配和信可以用[[:alpha:]]
相匹配,因此,您可以使用TRE正則表達式與gsub
:
string1 = "A((..A>B)A"
gsub(">[[:alpha:]]|[[:punct:]]", "", string1)
# => [1] "AAA"
注意>
是還有一個與[[:punct:]]
匹配的字符,因此,這裏不需要任何替代方法,只需在它後面用一個字母將其刪除即可。
圖案的詳細資料:
>[[:alpha:]]
- 一個>
任何字母|
- 或[[:punct:]]
- 標點或符號。這將工作使用你的工作加上領先lookbehind首先尋找什麼後>
字符。
gsub('(?<=>).|[[:punct:]]', '', "A((..A>B)A", perl=TRUE)
## [1] "AAA"
一個不使用Perl的略微不太複雜的正則表達式,似乎在這個例子中工作,以及:
gsub("[[:punct:]]|>(.)", "", "A((..A>B)A")
[1] "AAA"