暂时使用R但我的正则表达技能是新手等级。我试图删除“s”,如果它是单词中的最后一个字符,除非前面有“i”或“s”。样品...
dfx <- c("class","guests","trips","sassy","basis","fruits")
dfx <- sub("s$","",dfx)
View(dfx)
任何例子或指导都将不胜感激。
答案 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