带有可变模式的 gsub 循环加上正则表达式行尾 R

问题描述 投票:0回答:2

我的问题是如何做 [this question][1] 的答案,但只有当模式以字符串结尾结束时才匹配。

我的想法是在模式之后添加 $,以指示行尾,例如:

removePunctuation <- function(punctuationObject){
  itemsToBeRemoved <- c(".", ",", ";", ":", "'", "!", "#", "-", "--")
  resultObject <- punctuationObject
  for (itemToReplace in itemsToBeRemoved){
    resultObject <- gsub(itemToReplace$, "", resultObject, fixed = TRUE)
  }
  resultObject
}

但它不起作用。我尝试了同一件事的许多变体,但在声明可变模式(例如“itemToReplace”)后,我无法将 $ 读取为正则表达式。 [1]: For 循环遍历要在 R 的 gsub 中使用的项目列表

r gsub
2个回答
0
投票

首先,您可以使用

sub
代替
gsub
。其次,您需要将
$
粘贴到 itemsToBeRemoved 的末尾。但是由于
$
是元字符,您不能在
fixed=TRUE
调用中使用
gsub
。该问题的一种解决方案是将标点符号项包含在
[]
:

removePunctuation <- function(punctuationObject){
  itemsToBeRemoved <- c(".", ",", ";", ":", "'", "!", "#", "-", "--")
  resultObject <- punctuationObject
  for (itemToReplace in itemsToBeRemoved){
    resultObject <- sub(paste0("[", itemToReplace, ']$'), "", resultObject)
  }
  resultObject
}

测试:

removePunctuation("Hello, I use R.")
# [1] "Hello, I use R"

0
投票

我会使用

sub
删除行尾的变量.

s <- c("x", ".x", "x.", "x--x", "x--", "x---")

sub("(--|[.,;:'!#-])$", "", s)
#[1] "x"    ".x"   "x"    "x--x" "x"    "x-"
© www.soinside.com 2019 - 2024. All rights reserved.