R-使用正则表达式替换字符串(仅此)的最后一次出现



我有一个字符串,假设mystring =" aabbccawww"。我想使用gsub表达式替换" a",和仅的mystring中的最后一个" a"。那就是" aabbccawww"。我在网站上发现了类似的问题,但是他们都要求取代最后一次发生和随后的一切。我尝试过GSUB(" a [^a]*$"," a",mystring),但它给出了" aabbcca"。我知道我可以将Stringi函数用于此目的,但是我需要在代码的一部分中实现的解决方案,在该代码的一部分中,使用此类函数会很复杂,因此我想使用正则表达式。有任何建议吗?

您可以使用stringi库,使字符串变得非常容易,即

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

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

的反向注册
sub("a([^a]*)$", "A\1", MyString)
#[1] "aabbccAwww"

虽然Akrun的答案应该解决问题(不确定,尚未使用1等),但您也可以使用LOOCOUTS:

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

这基本上是说:找到一个不遵循任何数量字符和aa(?!x)是所谓的Lookout,这意味着搜索表达式不包含在比赛中。

您需要(.|n),因为.涉及所有字符,除了销售线。

以供有关监视或其他正则言论的参考,我可以推荐http://regexr.com/。

最新更新