现在,我正在尝试设置一个条件,以便如果有一个以“ s”结尾的单词,并且在“ s”之前有4个或更多字符,请添加撇号( ')放在该单词的“ s”之前。
因此将“他的计算机的苹果酱”转换为“他的计算机的苹果酱”
知道我该怎么做吗?
我遇到的问题是,这不起作用(有充分的理由):
library(stringr)
str_replace_all("his computers applesauce", "\\b[a-z]{4,}s\\b", "\\b[a-z]{4,}'s\\b")
#> [1] "his b[a-z]{4,}'sb applesauce"
答案 0 :(得分:3)
您需要将单词捕获到一个组中(例如第1组),然后在替换时可以使用\\1
向后引用它,并相应地进行替换。
只需更改您的字符串,
str_replace_all("his computers applesauce", "\\b[a-z]{4,}s\\b", "\\b[a-z]{4,}'s\\b")
到
str_replace_all("his computers applesauce", "\\b([a-z]{4,})s\\b", "\\1's")
答案 1 :(得分:1)
您正尝试将匹配项替换为正则表达式本身。
您需要捕获组。 \ b([a-zA-Z] {4,})(s)\ b 像这样
library(stringr)
str_replace_all("his computers applesauce", "\\b([a-z]{4,})(s)\\b", "\\1'\\2")