使用正则表达式替换字符串的最后一次出现(并且仅替换它)

时间:2017-09-08 08:24:17

标签: r regex

我有一个字符串,比如MyString =" aabbccawww"。我想使用gsub表达式替换最后一个" a"在MyString中由" A",,只有它。那是" aabbccAwww"。我在网站上发现了类似的问题,但他们都要求更换最后一次出现以及之后的所有内容。 我尝试了gsub(" a [^ a] * $"," A",MyString),但它给了#34; aabbccA"。我知道我可以为此目的使用stringi函数,但我需要在代码的一部分中实现解决方案,其中使用这些函数会很复杂,所以我想使用正则表达式。 有什么建议吗?

3 个答案:

答案 0 :(得分:6)

你可以使用stringi库来处理字符串非常容易,即

library(stringi)

x <- "aabbccawww"
stri_replace_last_fixed(x, 'a', 'A')
#[1] "aabbccAwww"

答案 1 :(得分:5)

我们可以使用sub匹配'a',后跟零个或多个不是'a'([^a]*)的字符,将其捕获为组((...)),直到字符串的结尾($)并将其替换为“A”,然后是捕获的组的反向引用(\\1

sub("a([^a]*)$", "A\\1", MyString)
#[1] "aabbccAwww"

答案 2 :(得分:0)

虽然akrun的答案可以解决问题(不确定,还没有使用\1等),你也可以使用了望台:

a(?!(.|\n)*a)

这基本上是这样说的:找到一个a,后跟任意数量的字符和a(?!x)是一个所谓的了望点,这意味着搜索到的表达式不会包含在匹配中。

您需要(.|\n),因为.指的是除换行符之外的所有字符。

有关了望台或其他正则表达式的参考,我可以推荐http://regexr.com/