仅在/何时满足条件时才替换字符串组件?

时间:2018-12-15 18:18:41

标签: r regex stringr

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

2 个答案:

答案 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")