R:Gsub 通过在替换中跳过一个字符来替换模式

R: Gsub replacing pattern with skipping a character in replacement

我想使用 R 中的 gsub() 函数进行简单的替换。参见示例:

#I want: 
Huiswaard 2 Oost
Huiswaard 1 Zuid
Huiswaard 2 West

#To become:
Huiswaard-2-Oost
Huiswaard-1-Oost
Huiswaard-2-Oost 

通过反复试验的绝妙方法,我尝试了这个:

data <- gsub('Huiswaard\s.\s>*', "Huiswaard-.-", df)
data <- gsub('Huiswaard\s.\s>*', "Huiswaard-.*-", df)
data <- gsub('Huiswaard\s.\s>*', "Huiswaard-(.)-", df)
data <- gsub('Huiswaard\s.\s>*', "Huiswaard-\(\)-", df)

全部无效。我最终得到这样的东西:

Huiswaard-.-West

有人知道如何使用 gsub 跳过替换参数中的字符吗?

在正则表达式中,您可以使用括号将 back-reference 与 \1

分组
data <- gsub('Huiswaard\s(\d)\s>*', "Huiswaard-\1-", df)
data
[1] "Huiswaard-2-Oost" "Huiswaard-1-Zuid" "Huiswaard-2-West"

如果你想改变后缀,你也可以用\w+捕获第二个单词,这将捕获space之后的1个或多个单词字符。:

data <- gsub('Huiswaard\s(\d)\s\w+', "Huiswaard-\1-Oost", df)
data
[1] "Huiswaard-2-Oost" "Huiswaard-1-Oost" "Huiswaard-2-Oost"

我用这个秘籍 sheet 来帮助我理解正则表达式:https://www.rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf