【问题标题】:How to substitute a special character between words in R [duplicate]如何在R中的单词之间替换特殊字符[重复]
【发布时间】:2015-04-06 17:13:50
【问题描述】:

我有一串字符。

str = c(".wow", "if.", "not.confident", "wonder", "have.difficulty", "shower")

我正在尝试替换“。”在带有空格的单词之间。所以它看起来像这样

".wow", "if.", "not confident", "wonder", "have difficulty", "shower"

首先,我试过了

gsub("[\\w.\\w]", " ", str)
[1] "  o "            "if"              "not confident"   " onder"         
[5] "have difficulty" "sho er " 

它给了我想要的空白,但把所有的 w 都剪掉了。然后,我尝试了

gsub("\\w\\.\\w", " ", str)
[1] ".wow"          "if"            "no onfident"   "wonder"       
[5] "hav ifficulty" "shower."    

它保留了 w,但在“.”之前和之后带走了其他字符。

我也不能用这个

gsub("\\.", " ", str)
[1] " wow"             "if "              "not.confident"   "wonder"         
[5] "have.difficulty" "shower" 

因为它会带走“。”不在话之间。

【问题讨论】:

    标签: regex r substitution


    【解决方案1】:

    使用capturing groups and back-references:

    sub('(\\w)\\.(\\w)', '\\1 \\2', str)
    # [1] ".wow"            "if."             "not confident"   "wonder"         
    # [5] "have difficulty" "shower"
    

    可以通过将要分组的字符放在一组括号( ... ) 中来创建捕获组。反向引用回忆捕获组匹配的内容。

    反向引用指定为 (\);后跟一个数字表示该组的编号。

    使用lookaround 断言:

    Lookarounds 是零宽度的断言。它们不会“消耗”字符串上的任何字符。

    sub('(?<=\\w)\\.(?=\\w)', ' ', str, perl = TRUE)
    

    【讨论】:

      【解决方案2】:

      试试

      gsub('(\\w)\\.(\\w)', '\\1 \\2', str)
      #[1] ".wow"            "if."             "not confident"   "wonder"         
      #[5] "have difficulty" "shower"       
      

      或者

      gsub('(?<=[^.])[.](?=[^.])', ' ', str, perl=TRUE)
      

      或者按照@rawr 的建议

      gsub('\\b\\.\\b', ' ', str, perl = TRUE)
      

      【讨论】:

      • 成功了!能否请您解释一下为什么我必须添加括号来幽默我?
      • @wen hwnd 的帖子里已经解释过了。
      • @rawr 谢谢,这样更好。我想如果没有perl=TRUE 它将无法工作
      • @rawr 它给了我gsub('\\b\\.\\b', ' ', str)# [1] " wow" "if " "not confident" "wonder" [5] "have difficulty" "shower"
      猜你喜欢
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2015-03-03
      相关资源
      最近更新 更多