删除最后一个字符,除非前面有特定字符

时间:2018-04-20 14:44:21

标签: r regex

暂时使用R但我的正则表达技能是新手等级。我试图删除“s”,如果它是单词中的最后一个字符,除非前面有“i”或“s”。样品...

dfx <- c("class","guests","trips","sassy","basis","fruits")
dfx <- sub("s$","",dfx)
View(dfx)

任何例子或指导都将不胜感激。

2 个答案:

答案 0 :(得分:6)

您可以为此使用外观。我不是最好的,但请查看this教程以了解更多信息。例如,(?<!s)s将匹配&#34; s&#34;没有先前的&#34; s&#34;。请注意,您必须设置perl=T才能在R。

中使用它们
sub("(?<!s|i)s$","",dfx,perl = T)
# [1] "class" "guest" "trip"  "sassy" "basis" "fruit"

答案 1 :(得分:1)

s(?<![is]s)\b是我们需要的。

https://regex101.com/r/ANyYB0/1

基准显示正确的方式和错误的方式

Regex1:   s(?<![is]s)\b
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.30 s,   295.43 ms,   295426 µs
Matches per sec:   507,741


Regex2:   (?<![is])s\b
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.72 s,   718.22 ms,   718215 µs
Matches per sec:   208,851