r-仅在满足条件时更换字符串组件



现在,我正在尝试设置一个条件,这样,如果有一个单词以"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"

您需要在一个组(比如组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")

您正试图用正则表达式本身替换匹配项

您需要捕获组\b([a-zA-Z]{4,}((s(\b像这个

library(stringr)
str_replace_all("his computers applesauce", "\b([a-z]{4,})(s)\b", "\1'\2")

最新更新