【问题标题】:How do I replace brackets using regular expressions in R?如何在 R 中使用正则表达式替换括号?
【发布时间】:2015-07-31 11:35:07
【问题描述】:

我确信这是一个非常简单的问题。与此同时,我对 R 中的 RegEx 非常熟悉,但我就是无法理解这一点。

假设,我们有这个字符串:

a <- c("a b . ) ] \"")

现在,我要做的就是删除引号、点、右括号和右括号。

所以,我想要:"a b"

我试过了:

gsub("[.\\)\"\\]]", "", a)

它不起作用。它返回:"a b . ) ]" 所以什么都没有被删除。

只要我从搜索模式中排除 \\],它就会起作用...

gsub("[.\\)\"]", "", a)

但是,当然,它不会删除右括号!

我做错了什么?!?

感谢您的帮助!

【问题讨论】:

  • 试试gsub('[[:punct:] ]+', ' ', a) 最好也显示预期的输出。或gsub('[][]|[.")]', '', a)
  • 谢谢!第二个对我有用。当然,[[:punct:]] 版本也可以,但我不想删除所有标点符号。你能给我一个提示,为什么我的版本不起作用。我想了解这个问题。谢谢!

标签: regex r


【解决方案1】:
a <- c('a b . ) ] "');
gsub('\\s*[].)"]\\s*','',a);
## [1] "a b"

当您想在括号表达式中包含右括号字符时,您应该始终将它首先包含在括号中;这导致它被视为括号表达式中的一个字符,而不是括号表达式的结束分隔符。

【讨论】:

    【解决方案2】:

    以@akruns 评论为基础

    library(stringr)
    str_trim(gsub('[.]|[[:punct:]]', '\\1', a))
    

    将第一组括号中的句点替换为您要保留的标点符号。

    【讨论】:

      【解决方案3】:

      你可以试试这个。

      > gsub("\\b\\W\\b(*SKIP)(*F)|\\W", "", a, perl=T)
      [1] "a b"
      > gsub("\\b(\\W)\\b|\\W", "\\1", a, perl=T)
      [1] "a b"
      

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多