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