Замена строкового компонента, только если / когда условие выполнено? - PullRequest
0 голосов
/ 15 декабря 2018

Сейчас я пытаюсь установить условие, чтобы, если есть слово, оканчивающееся на "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 голосов
/ 15 декабря 2018

Вы пытаетесь заменить матч самим регулярным выражением.

вам нужно захватить группу. \ b ([a-zA-Z] {4,}) (s) \ b как это

library(stringr)

str_replace_all("his computers applesauce", "\\b([a-z]{4,})(s)\\b", "\\1'\\2")
0 голосов
/ 15 декабря 2018

Вам нужно захватить слово в группе (скажем, в группе 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")
...