我遇到了正则表达式/字符串替换难题(抱歉,如果这是重复的帖子,我正在寻找解决方案但找不到,但如果我错过了类似的帖子,请告诉我!)。
我们有一个结构为两列的数据集:主语和动词。我想删除动词列中的每个情态助动词,但前提是情态与另一个词在一起。所以我想将字符串“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/