R正则表达式:在>之后仅删除紧随其后的字符。

时间:2017-07-17 17:38:02

标签: r regex gsub

我在R中有以下字符串:

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

我想删除所有标点符号,以及>之后的字母,即>B

这是我想要的输出:

output = "AAA"

我尝试使用gsub(),如下所示:

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

但这会产生AABA,它会保留紧随其后的字符。

3 个答案:

答案 0 :(得分:7)

这将首先使用您的工作加上一个领先的lookbehind来查找>字符后面的内容。

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

答案 1 :(得分:2)

不使用perl的一个稍微复杂的正则表达式似乎也适用于这个例子:

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

答案 2 :(得分:1)

你说

  

>

之后立即删除所有 标点符号 字母

标点符号与[[:punct:]]匹配,并且字母可以与[[:alpha:]]匹配,因此,您可以使用带有gsub的TRE正则表达式:

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

请参阅online R demo

请注意>也是与[[:punct:]]匹配的字符,因此,您不需要在此处查看任何内容,只需将其删除即可。

模式详情

  • >[[:alpha:]] - >和任何字母
  • | - 或
  • [[:punct:]] - 标点符号。