【问题标题】:R Regex: removing only the immediate following character after >R 正则表达式:在 > 之后仅删除紧随其后的字符
【发布时间】:2017-07-17 17:38:02
【问题描述】:

我在 R 中有以下字符串:

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

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

这是我想要的输出:

output = "AAA"

我尝试如下使用gsub()

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

但这给出了AABA,它保留了紧随其后的字符。

【问题讨论】:

    标签: r regex gsub


    【解决方案1】:

    这将使用您的工作加上先行的后向先查找> 字符之后的内容。

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

    【讨论】:

      【解决方案2】:

      不使用 perl 的稍微简单的正则表达式似乎也适用于本示例:

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

      【讨论】:

        【解决方案3】:

        你说

        删除所有标点符号,以及紧跟&gt;

        之后的字母

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

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

        online R demo

        注意,&gt; 也是一个与[[:punct:]] 匹配的字符,因此,您不需要在此处进行任何环视,只需将其删除,并在其后加上一个字母即可。

        模式详情

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

        【讨论】:

          猜你喜欢
          • 2020-01-09
          • 2019-03-21
          • 1970-01-01
          • 1970-01-01
          • 2013-04-28
          • 2021-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多