r - 有没有办法只在与另一个词配对时才替换一个词?

标签 r regex

我遇到了正则表达式/字符串替换难题(抱歉,如果这是重复的帖子,我正在寻找解决方案但找不到,但如果我错过了类似的帖子,请告诉我!)。

我们有一个结构为两列的数据集:主语和动词。我想删除动词列中的每个情态助动词,但前提是情态与另一个词在一起。所以我想将字符串“can do”中的“can”替换为“”,但我不想替换单独出现的“can”。我想我也许可以使用 ifelse 语句,如下面的代码所示:

all_doubles <- all_doubles %>%
  mutate(modal_removed = ifelse(str_detect(all_doubles$verb_lemma, modal_with_words) == TRUE,
                            str_replace_all("can|could|may|might|shall|should|will|would|need", ""),
                            all_doubles$verb_lemma))

但我无法让正则表达式正确地返回仅伴随其他词的模态助动词。现在,我正在使用它,但它似乎运行不佳:

modal_with_words <- ".+can|could|may|might|shall|should|will|would|need.+"

任何建议将不胜感激(我相信有更好的方法来做到这一点)!非常感谢!

最佳答案

如果后面有一个空格 + 一个字母,您似乎只想从列表中删除一个示范动词。

在这种情况下,你只需要

rx <- '(?:\\s+|^)(?:can|could|may|might|shall|should|will|would|need)(\\s+[[:alpha:]])'
verb <- c('I can help you.', 'We shall not stop here!')
gsub(rx, '\\1', verb)
# => [1] "I help you."       "We not stop here!"

参见 R demo . (?:\s+|^)(?:can|could|may|might|shall|should|will|would|need)(\s+[[:alpha:]]) 正则表达式匹配

  • (?:\s+|^) - 一个或多个空格或字符串开头
  • (?:can|could|may|might|shall|should|will|would|need) - 其中一个词
  • (\s+[[:alpha:]]) - 第 1 组(替换中的 \1 指的是这个值):一个或多个空格和一个字母.

关于r - 有没有办法只在与另一个词配对时才替换一个词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68839851/

相关文章:

c# - 使用正则表达式替换 csv 列中的\r\n

regex - R tm 在语料库中使用 gsub 替换单词

python - 在python中,如何使用正则表达式进行有条件的模式匹配

r - 如何一次从多面图保存/生成多个单个图?

r - Data.table 和 get() 命令 (R)

regex - 更正 bash sed 命令语法以获得正确的子字符串

regex - 如何使用正则表达式检查行是否为空

r - 从向量中获取唯一组合的网格

r - 根据另一列中的过去值标记一列中的行

R - 在使用注释时向 ggmap (ggplot2) 添加图例